log4net starter package - arcdev/engram404 GitHub Wiki
originally posted 2016-04-12 at https://engram404.net/log4net-starter-package-2/
Every time I create a new project and include log4net, I have to go back to an previous project to get myself started with a good config. This post should give me that starting point.
In Visual Studio NuGet Package Manager Console (Tools > NuGet Package Manager > Package Manager Console):
install-package log4net
Edit the AssemblyInfo.cs and add:
[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "log4net.config")]
Add a new file named: log4net.config and set the Copy to Output Directory to either Copy always or Copy if newer. (Your choice)
Now, the good stuff:
<log4net>
<!-- for intellisense put the log4net.xml in C:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas -->
<appender name="DebugAppender" type="log4net.Appender.DebugAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread]:%-5level %logger.%method %message%newline" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread]:%-5level %logger.%method %message%newline" />
</layout>
</appender>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%thread]:%-5level %logger.%method %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs\YourNameHere-[%processid].log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="32" />
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger.%method - %message%newline" />
</layout>
<!-- ignore logs to this logger/class -->
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="loggerToMatch" value="LogSinkFoo" />
<param name="acceptOnMatch" value="false" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="loggerToMatch" value="AnotherLogSink" />
<param name="acceptOnMatch" value="false" />
</filter>
</appender>
<appender name="LogSinkFoo-RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs\LogSinkFoo-[%processid].log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="32" />
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger.%method - %message%newline" />
</layout>
</appender>
<appender name="perm-FileAppender" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="Logs\~YourNameHere-permanent-record.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger.%method - %message%newline" />
</layout>
<!-- ignore logs to this logger/class -->
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="loggerToMatch" value="LogSinkFoo" />
<param name="acceptOnMatch" value="false" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<param name="loggerToMatch" value="AnotherLogSink" />
<param name="acceptOnMatch" value="false" />
</filter>
</appender>
<root>
<!-- DEBUG, INFO, ERROR, WARN, FATAL, OFF -->
<level value="DEBUG" />
<appender-ref ref="DebugAppender" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="TraceAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
<!-- example to handle a specific logger/class -->
<logger name="LogSinkFoo">
<level value="DEBUG" />
<appender-ref ref="LogSinkFoo-RollingFileAppender" />
<appender-ref ref="ConsoleAppender" />
</logger>
<logger name="perm-record">
<level value="DEBUG" />
<appender-ref ref="perm-FileAppender" />
<appender-ref ref="ConsoleAppender" />
</logger>
</log4net>
TODO: create a NuGet package with this done for you?