2008-12-16 214 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>