Because I’m waaaaay interested in logging, tracing, diagnostics, analytics – basically, what’s going on with my shit – I spent some time today tweaking our log4net configuration here at work. The actual motivation for sitting down and doing this was that I wasn’t getting any notification from uncaught exceptions in our sites, and I saw a couple in the event log on our live box. Naturally I flew into a blind rage and immediately set up an SmtpAppender for the existing log4net config for that site. After an hour or so I have a configuration that I like, so here it is.
I added two things:
- Split configuration files so we can drop a new log4net configuration into a site without worrying too much about the main web.config
- SmtpAppender for any log messages at WARN level or above
Here’s the template web.config file with the log4net configSource attribute:
<?xml version=“1.0“?>
<!–
Note: As an alternative to hand editing this file you can use the
web admin tool to configure settings for your application. Use
the Website->Asp.Net Configuration option in Visual Studio.
A full list of settings and comments can be found in
machine.config.comments usually located in
\Windows\Microsoft.Net\Framework\v2.x\Config
–>
<configuration>
<configSections>
<section name=“log4net“ type=“log4net.Config.Log4NetConfigurationSectionHandler,Log4net“/>
</configSections>
<log4net configSource=“log4net_debug.config“ />
<!–
log4net debugging
if debugging log4net uncomment this line to specify a file output for trace messages
<system.diagnostics>
<trace autoflush=”true”>
<listeners>
<add
name=”textWriterTraceListener”
type=”System.Diagnostics.TextWriterTraceListener”
initializeData=”log4net.txt” />
</listeners>
</trace>
</system.diagnostics>
–>
</configuration>
The debug log4net config file:
<log4net debug=“true“>
<logger name=“default“>
<level value=“INFO“/>
<appender-ref ref=“LogFileAppender“/>
</logger>
<appender name=“LogFileAppender“ type=“log4net.Appender.RollingFileAppender“>
<param name=“File“ value=“log.txt“/>
<param name=“AppendToFile“ value=“true“/>
<rollingStyle value=“Size“/>
<maxSizeRollBackups value=“10“/>
<maximumFileSize value=“1KB“/>
<layout type=“log4net.Layout.PatternLayout“>
<conversionPattern value=“%-5p %logger %d{yyyy-MM-dd hh:mm:ss} – %m%n“/>
</layout>
</appender>
<!–
<appender name=”SmtpAppender” type=”log4net.Appender.SmtpAppender”>
<to value=”[admin email address]” />
<!– noreply@websiteurl –>
<from value=“noreply@websiteurl“ />
<!– EXCEPTION:[environment]:[Website name] –>
<subject value=“EXCEPTION:[environment]:[Website name]“ />
<!–
smtp servers
live: localhost
staging: TEQ-STG01
–>
<smtpHost value=“[smtp server]“ />
<bufferSize value=“512“ />
<lossy value=“true“ />
<evaluator type=“log4net.Core.LevelEvaluator“>
<threshold value=“WARN“/>
</evaluator>
<layout type=“log4net.Layout.PatternLayout“>
<conversionPattern value=“%newline%date [%thread] %-5level %logger [%property{NDC}] – %message%newline%newline%newline“ />
</layout>
</appender>
–>
<root>
<level value=“ALL“/>
<appender-ref ref=“LogFileAppender“ />
<!–
<appender-ref ref=”SmtpAppender”/>
–>
</root>
</log4net>
And the release log4net config file:
<log4net debug=“false“>
<logger name=“default“>
<level value=“WARN“/>
<appender-ref ref=“LogFileAppender“/>
</logger>
<appender name=“LogFileAppender“ type=“log4net.Appender.RollingFileAppender“>
<param name=“File“ value=“log.txt“/>
<param name=“AppendToFile“ value=“true“/>
<rollingStyle value=“Size“/>
<maxSizeRollBackups value=“3“/>
<maximumFileSize value=“1KB“/>
<layout type=“log4net.Layout.PatternLayout“>
<conversionPattern value=“%-5p %logger %d{yyyy-MM-dd hh:mm:ss} – %m%n“/>
</layout>
</appender>
<appender name=“SmtpAppender“ type=“log4net.Appender.SmtpAppender“>
<to value=“[admin email address]“ />
<!– noreply@websiteurl –>
<from value=“noreply@websiteurl“ />
<!– EXCEPTION:[environment]:[Website name] –>
<subject value=“EXCEPTION:[environment]:[Website name]“ />
<!–
smtp servers
live: localhost
staging: TEQ-STG01
–>
<smtpHost value=“[smtp server]“ />
<bufferSize value=“512“ />
<lossy value=“true“ />
<evaluator type=“log4net.Core.LevelEvaluator“>
<threshold value=“WARN“/>
</evaluator>
<layout type=“log4net.Layout.PatternLayout“>
<conversionPattern value=“%newline%date [%thread] %-5level %logger [%property{NDC}] – %message%newline%newline%newline“ />
</layout>
</appender>
<root>
<level value=“WARN“/>
<appender-ref ref=“LogFileAppender“ />
<appender-ref ref=“SmtpAppender“/>
</root>
</log4net>
I’ll be suggesting that this configuration is adopted as standard for all new builds and I’ll go and reconfigure a few of our other active sites too.