53

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

  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 中有以下代码:

    <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] 的附加程序。

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

谢谢!

4

5 回答 5

39

在 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;
}
于 2008-12-16T21:13:04.843 回答
37

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

于 2012-10-20T14:13:19.863 回答
4

我完全支持@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>
于 2015-01-20T14:46:25.163 回答
3

您是否尝试将configsection处理程序添加到您的 app.config?例如

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
于 2008-12-16T21:09:32.807 回答
2

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

您可以将多个附加程序添加到您的日志配置中,但您需要在该<root>部分中注册每个附加程序。

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

您还可以参考 apache文档配置 log4net。

于 2014-12-30T17:36:57.827 回答