2008-12-16 83 views
41

我想将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下面的代码:

<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从配置文件中读取设置?

谢谢!

+0

你在你的app.config有什么码? – sgwill 2008-12-16 21:11:19

+3

注给他人:显示的`app.config`设置,显然,正确*除了*为`EventLogAppender`被命名在``部,和`ConsoleAppender`被命名在`<附加器-REF>`部分 - 不匹配。看@康斯坦丁的答案。此外,**利用这个问题别人不熟悉log4net的**来学习如何使用它 - **注意,你可能会想的附加目的地不同类型* ** *比这里的一个 - 比如`TYPE =“log4net的.Appender.FileAppender,log4net“(附加到文件,不附加到Windows事件日志)。 – 2014-01-28 18:13:50

回答

33

行添加到您的app.config在configSections元素

<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; 
} 
+0

谢谢正是我所需要 – Jay 2010-03-04 13:33:19

2

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

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

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

1

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

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

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

你也可以参考apache documentation配置log4net。

1

我完全支持@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>