5

我有与大多数人对 Log4net 所做的相反的问题。我有一个基本的滚动日志附加器,我在后面的代码中使用了 INFO、WARN 和 ERROR 级别。我在 app.config 中关闭了调试。除了滚动日志附加程序之外,它仍然将日志数据推送到控制台窗口。

我该如何阻止这种行为?它使查看控制台窗口成为一场噩梦。

我的配置:

<log4net debug="false">
  <appender name="RollingFileAppender"
            type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString"
          value="milliondollars.log"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <rollingStyle value="Composite"/>
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="INFO" />
      <levelMax value="FATAL" />
    </filter>
    <datePattern value="yyyyMMdd"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %-5level %logger: %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender" />
  </root>
</log4net>
4

3 回答 3

1

根据您提供的其他信息,我可以看到几件事。首先,您正在记录所有消息(包括 DEBUG 消息)。您只是没有显示 log4net 调试信息。至于您为什么要写入控制台窗口,我建议您查看记录器消息的包装器。也许您正在那里写信给控制台。

此外,在调试模式下逐步执行您的程序。查看哪一行正在写入您的控制台。

于 2011-06-02T00:27:05.223 回答
1

好吧,看来您不想放弃更多细节...

我可以想到以下可能的原因:

  • 您在任何<logger><root>部分下列出了控制台附加程序
  • 您以编程方式注册控制台附加程序
  • 你有一个记录器包装器,它总是在记录之前运行 Console.Write 行
于 2011-06-02T00:37:48.947 回答
0

我的问题是在创建记录器实例时使用它;

        log4net.Config.BasicConfigurator.Configure();
        ILog log = log4net.LogManager.GetLogger(typeof(Program));

我花了一点时间才弄清楚,这是忽略我的配置并使用默认值进行初始化。按照人们的建议将其替换为它,并且效果很好;

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

来源:http ://elegantcode.com/2007/12/07/getting-started-with-log4net/

于 2013-08-08T09:20:31.177 回答