2011-08-20 85 views
2

第一次與log4net的玩,我遇到麻煩了。我跟着各種教程,但我一直無法得到它記錄任何東西。讓我告訴你我的代碼,希望你能告訴我我做錯了什麼。log4net的不記錄(可能不是初始化)

的app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <log4net>  
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="CurrentLog.txt"/> 
     <staticLogFileName value="true"/> 
     <appendToFile value="true"/> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <acceptOnMatch value="true" /> 
     <levelMin value="DEBUG" /> 
     <levelMax value="FATAL" /> 
     </filter> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date{dd MMM yyy HH:mm:ss} %level %message. %newline %exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

的AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

Presenter.cs

在班上名列前茅我有這樣的:

private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

然後我嘗試在類以後使用日誌變量:

bool isDebugEnabled = log.IsDebugEnabled; 
log.Debug("Failed to save", e); 

每當我檢查isDebugEnabled變量,它是假的,因爲都是其他isBlahEnabled,如果我檢查日誌變量。

我的懷疑是我沒有正確連接我的app.config文件,因爲這是我第一次嘗試使用它。我通過在解決方案資源管理器中右鍵單擊項目創建,添加一個新項目,選擇應用程序配置文件並將其命名爲app.config。

+1

運行應用程序的帳戶是否有權創建並寫入配置位置中的文件? – Oded

+0

它的確如此。看到我對@ Waldo的回答的回覆,我現在可以在不改變任何權限的情況下進行日誌記錄工作了。 – Stu

回答

14

這一次爲我的作品:

的app.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
     <appender name="Main" type="log4net.Appender.RollingFileAppender"> 
     <file value="${USERPROFILE}\My Documents\MyApp\Logs\Main.log" /> 
     <appendToFile value="false" /> 
     <maximumFileSize value="1GB" /> 
     <maxSizeRollBackups value="3" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%date{ABSOLUTE} %-5level %-18logger %message%newline" /> 
     </layout> 
     </appender> 
     <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Main" /> 
     </root> 
    </log4net> 
</configuration> 

還可以肯定的app.config構建操作設置爲並複製到輸出目錄設置爲「複製如果更新「。您可以在文件屬性中設置這些設置。

Program.cs的

public static ILog Log; 

static void Main(string[] args) 
{ 
    // Setup Logging 
    log4net.Config.XmlConfigurator.Configure(); 
    Log = LogManager.GetLogger("MyAwesomeApp"); 

    // ... 
} 
+2

我刪除了AssemblyInfo.cs中的行,並將Main()中的第一行添加到App.xaml.cs的構造函數中(我正在開發WPF項目),現在一切正常。任何想法爲什麼它不工作? – Stu

+0

我不熟悉assemblyinfo方法。文檔中描述了這些內容?我想它做的事情與實際配置稍有不同。 –

+0

這兩個教程都使用AssemblyInfo.cs方法:http://www.codeproject.com/KB/dotnet/Log4net_Tutorial.aspx和http://mitch-wheat.blogspot.com/2007/04/log4net-net- logging-tool.html,但現在沒有打擾,這是工作!非常感謝! – Stu

3

我想補充我的2美分:我有同樣的問題,但我用在不同的log4net.config上述配置(所以我對所有的應用程序相同的配置),但我只是忘了在build'Copy new when'(或類似的措辭,德文版本)上設置文件屬性。

2

我想補充我的2P的情況下,這可以幫助別人尋找一個解決這個問題:

在我來說,我用的是NServicebus.Logging包除了log4net的,而這個包中包含的類型與與Log4net中的名稱完全相同,僅在命名空間中有所不同。

修復'使用'語句或完全限定類型名稱解決了它,但很難發現問題。