Microsoft Dot Net Master

Microsoft Dot Net Master
Microsoft Dot Net Master

Monday, June 9, 2014

Log4Net basics with a Console Application (c#)

Step 0 – Reference Log4Net

Using NuGet this is really easy – but no matter how you do it, you should end up with a reference to log4net in your project.
Log4Net

Step 1 – Add an entry to AssemblyInfo.cs

Add the assembly for the log4net.config to AssemblyInfo.cs
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
 

Step 2 – Config settings file for App.config

Add a config file called App.config to your solution if it is not there already…
I added the following config settings within this file as follows:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />
  </configSections>

  <!-- Log4net Logging Setup -->
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
      <file value="c:\\mylogfile.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>
  </log4net>
</configuration>

Step 3 – Create an instance of a logger and call logging

To create an instance of a logger, there are a couple of ways you can do this….
One suggestion by Tim is to add the following line within each class where you want to have logging…
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger
        (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
I am not sold on this approach, this is something where I would use Dependency Injection to inject the logger, but for a simple console app example this would complicate things, so I would go with the following approach just to get things working…
    class Program
    {
        static void Main(string[] args)
        {
            log4net.Config.BasicConfigurator.Configure();
            ILog log = log4net.LogManager.GetLogger(typeof(Program));
            log.Debug("This is a debug message");
            log.Warn("This is a warn message");
            log.Error("This is a error message");
            log.Fatal("This is a fatal message");
            Console.ReadLine();
        }
    }

Step 4 - Run the application

Simply run the application and you should see log file being created.

Local Disk (C)_2012-01-30_10-28-10