2011-04-08 84 views
3

我有以下代碼:爲什麼IsDebugEnabled在我的代碼中總是爲True?

private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 
XmlConfigurator.Configure(new FileInfo("log4net.config")); 

問題是下面總是語句返回True

if (Log.IsDebugEnabled) { /* do time consuming stuff and log the result */ 

這是我的log4net的配置_文件

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="ERROR" /> 
     <param name="LevelMax" value="ERROR" /> 
    </filter> 

    <param name="File" value="Log.txt" /> 
    <param name="AppendToFile" value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%5p [%d] - %m%n" /> 
    </layout> 

    </appender> 

    <root> 
    <appender-ref ref="LogFileAppender" /> 
    <appender-ref ref="ConsoleAppender" /> 
    </root> 

爲什麼IsDebugEnabled總是返回True?

+0

你看過這個問題嗎(http://stackoverflow.com/questions/220021/how-do-i-configure-log4net-so-that-log-isdebugenabled-is-true)。接受的答案看起來對你有用 – 2011-04-08 11:58:16

+0

IsDebugEnabled設置在哪裏? – 2011-04-08 11:58:21

+0

@RB我已經調用XmlConfigurator.Configure。 – 2011-04-08 12:06:04

回答

4

the log4net manual

注意,默認情況下,根記錄器被分配到Level.DEBUG。

嘗試:

<root> 
    <level value="INFO"/> 
</root> 

注意IsDebugEnabled由記錄電平控制。由於記錄器和appender之間的耦合鬆散,您在所有appender上都有LevelMin/LevelMax過濾器的事實並沒有幫助。

+0

這個技巧。謝謝! – 2011-04-08 12:24:43

1

定義爲rootCategory RollingFileAppender進行

1

你需要調用

XmlConfigurator.Configure(new FileInfo("log4net.config")); 

調用LogManager.GetLogger方法之前。我會建議您在啓動應用程序時進行此操作。因爲現在的代碼是這樣的,所以在你已經實例化它之前,它不會配置記錄器。

0

這是因爲根級值沒有設置。

<root> 
    <appender-ref ref="LogFileAppender" /> 
    <appender-ref ref="ConsoleAppender" /> 
</root> 

默認情況下,它將採用所有級別。 通過將根級值定義爲INFO,WARN,ERRORFATAL將解決您的問題。

+0

爲什麼downvote? – 2012-10-03 14:37:38

相關問題