让log4net使用应用程序配置文件来获取配置数据

时间:2008-12-16 21:03:48

标签: c# logging log4net

我想在我的application.config文件中存储log4net配置数据。根据我对文档的理解,我做了以下几点:

  1. 添加对log4net.dll的引用

  2. 在AssemblyInfo.cs中添加以下行:

    [assembly: log4net.Config.XmlConfigurator(Watch = true)]
    
  3. 按如下方式初始化记录器:

    private static readonly ILog log = LogManager.GetLogger(typeof(frmWizard));
    
  4. 我的app.config中有以下代码:

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

    但是,当我运行应用程序时,我在控制台上收到以下错误:

      

    找不到名为[Consoleappender]的appender。

    如何让log4net从配置文件中读取设置?

    谢谢!

5 个答案:

答案 0 :(得分:37)

在configSections元素

中的app.config中添加一行
<configSections>
 <section name="log4net" 
   type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, 
         Culture=neutral, PublicKeyToken=1b44e1d426115821" />
</configSections>

然后添加log4Net部分,但委托给其他地方的实际log4Net配置文件......

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

在您的应用程序代码中,创建日志时,请写

private static ILog GetLog(string logName)
{
    ILog log = LogManager.GetLogger(logName);
    return log;
}

答案 1 :(得分:33)

从问题中显示的配置中只配置了一个appender,它被命名为“EventLogAppender”。但是在root的配置中,作者引用了一个名为“ConsoleAppender”的appender,因此出现了错误消息。

答案 2 :(得分:4)

您是否尝试在app.config中添加configsection处理程序? e.g。

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

答案 3 :(得分:2)

我完全支持@Charles Bretana的回答。但是,如果它不起作用,请确保只有一个<section> 元素,并且configSections根元素的第一个子元素

configsections必须是配置后app.Config中的第一个元素:

<?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>
  <!-- add log 4 net config !-->
  <!-- add others e.g. <startup> !-->
</configuration>

答案 4 :(得分:1)

所有appender名称必须反映在根部分中 在您的情况下,appender名称是 EventLogAppender ,但在<root> <appender-ref ..部分,它被命名为 ConsoleAppender 。他们需要匹配。

您可以在日志配置中添加多个appender,但需要在<root>部分注册每个appender。

<appender-ref ref="ConsoleAppender" />
<appender-ref ref="EventLogAppender" />

您还可以在配置log4net时参考apache documentation