为什么我的代码中IsDebugEnabled始终为True?

时间:2011-04-08 11:53:26

标签: c# log4net

我有以下代码:

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?

4 个答案:

答案 0 :(得分:4)

来自the log4net manual

  

请注意,默认情况下,根记录器分配给Level.DEBUG。

尝试:

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

请注意,IsDebugEnabled由记录器级别控制。由于记录器和追加器之间的松散耦合,你在所有appender上都有LevelMin / LevelMax过滤器的事实没有帮助。

答案 1 :(得分:1)

为RollingFileAppender定义rootCategory

答案 2 :(得分:1)

您需要致电

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

在调用LogManager.GetLogger方法之前。我建议你在启动应用程序时这样做。因为代码是现在的样式,所以直到您已经实例化它之后才会配置记录器。

答案 3 :(得分:0)

那是因为根级别值未设置。

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

默认情况下,它将占用所有级别。  通过将根级别值定义为INFOWARNERRORFATAL将解决您的问题。