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?

⚠️ **GitHub.com Fallback** ⚠️