C# – Have log4net use application config file for configuration data


I would like to store log4net config data in my application.config file. Based on my understanding of the documentation, I did the following:

  1. Add a reference to log4net.dll

  2. Add the following line in AssemblyInfo.cs:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
  3. Initialize the logger as follows:

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
  4. I have the following code in my app.config:

      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        <level value="INFO" />
        <appender-ref ref="ConsoleAppender" />

However, when I run the application, I get the following error on the console:

No appender named [Consoleappender] could be found.

How can I get log4net to read settings from the config file?


Best Solution

Add a line to your app.config in the configSections element

 <section name="log4net" 
   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=, 
         Culture=neutral, PublicKeyToken=1b44e1d426115821" />

Then later add the log4Net section, but delegate to the actual log4Net config file elsewhere...

<log4net configSource="Config\Log4Net.config" />

In your application code, when you create the log, write

private static ILog GetLog(string logName)
    ILog log = LogManager.GetLogger(logName);
    return log;
Related Question