Writing logs to file

Yury Pogrebnyak picture Yury Pogrebnyak · Mar 21, 2012 · Viewed 68.1k times · Source

I have some troubles while writing logs from log4net to the file. I seem to do all as described in manual, but that does not work. Here is my logging.config file:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="log.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

Please help with an example of configuration file which actually works.

Answer

Contango picture Contango · Aug 10, 2013

Here is a complete step-by-step guide to adding Log4Net to your project, under Visual Studio 2012 and .NET 4.5.

  1. Add a new C# console app to your solution.

  2. Select Tools >> Library Package Manager >> Manage NuGet Packages For Solution and search for log4net. Install it, and select which project(s) you want to add the log4net references. enter image description here

  3. Edit Program.cs:

using System;
namespace Log4Net
{    
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger
                (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        static void Main(string[] args)
        {
            Console.WriteLine("Writing to \"log.txt\" in the same directory as the .exe file.\n");
            log.Info("Info logging");
            try
            {
                throw new Exception("Exception!");
            }
            catch (Exception e)
            {
                log.Error("This is my error", e);
            }
            Console.WriteLine("[any key to exit]");
            Console.ReadKey();
            }
        }
    }
}
  1. Add log4.config, right click and select Properties then select Copy to Output Directory - Copy If Newer.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="250KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</configuration>
  1. Edit App.Config so it matches the following:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <appSettings>
        <add key="log4net.Config" value="log4.config"/>
        <add key="log4net.Config.Watch" value="True"/>
        <add key="log4net.Internal.Debug" value="False"/>
    </appSettings>
</configuration>
  1. Run the program and observe the file log.txt that is created in the output \bin\Debug\ directory:

    2013-08-10 11:54:26,798 [10] INFO  Log4Net.Program [(null)] - Info logging
    2013-08-10 11:54:26,824 [10] ERROR Log4Net.Program [(null)] - This is my error
    System.Exception: Exception!
       at Log4Net.Program.Main(String[] args) in C:\Test\Log4Net\Program.cs:line 14
    
  2. In the future, if you want to add log4net to another Project, select Tools >> Library Package Manager >> Manage NuGet Packages For Solution select log4net and click Manage then tick the Projects you want to add log4net to. enter image description here