Simple log4net setup in a console application
- log4net
- c#
- .NET
There’s not much to this post, other than a very minimal setup for a console application using log4net for logging, with some nice basics, such as:
- red highlighting of errors
- yellow highlighting of warnings
- logs are written to both console and file
First, get log4net from Nuget and add the following line to AssemblyInfo.cs
.
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Here’s a sample App.config
.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level [%thread] %logger{1} %username - %message%newline" />
</layout>
<mapping>
<level value="WARN" />
<foreColor value="Yellow, HighIntensity" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="Red, HighIntensity" />
</mapping>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="./logs/log.log" />
<rollingStyle value="Date" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level [%thread] %logger{1} - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
</configuration>
And finally a simple Program.cs
!
using System;
using System.Security.Principal;
using log4net;
namespace MyApp
{
internal class Program
{
private static readonly ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private static void Main(string[] args)
{
Logger.InfoFormat("Running as {0}", WindowsIdentity.GetCurrent().Name);
Logger.Error("This will appear in red in the console and still be written to file!");
}
}
}