使log4net使用应用程序configuration文件作为configuration数据

我想将log4netconfiguration数据存储在我的application.config文件中。 根据我对文档的理解,我做了以下工作:

  1. 添加对log4net.dll的引用

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

    [assembly: log4net.Config.XmlConfigurator(Watch = true)] 
  3. 初始化logging器如下:

     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> 

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

没有find名为[Consoleappender]的appender。

我怎样才能让log4net从configuration文件中读取设置?

谢谢!

在configSections元素中添加一行到你的app.config

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

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

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

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

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

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

你有没有尝试添加一个configsection处理程序到你的app.config? 例如

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

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

您可以将多个appender添加到您的日志configuration中,但是您需要在<root>部分中注册每个appender。

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

你也可以参考关于configurationlog4net的apache 文档 。

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

configsections必须是你的app.Configconfiguration后的第一个元素:

 <?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 eg <startup> !--> </configuration>