【问题标题】:How do I disable log4net status messages to the console?如何禁用控制台的 log4net 状态消息?
【发布时间】:2010-09-27 19:17:31
【问题描述】:

我在我的 .NET 3.5 控制台应用程序中使用 log4net,并希望在控制台标准输出和 RollingFileAppender 中都能看到我生成的日志消息。文件输出就像一个魅力,但是当我执行时,我看到一串状态消息流向控制台标准。我想跳过所有状态信息,只看到我以编程方式生成到日志文件的相同消息。

这是我运行应用程序后看到的示例:

log4net: XmlHierarchyConfigurator: Configuration update mode [Merge].
log4net: XmlHierarchyConfigurator: Logger [root] Level string is [DEBUG].
log4net: XmlHierarchyConfigurator: Logger [root] level set to [name="DEBUG",value=30000].
log4net: XmlHierarchyConfigurator: Loading Appender [Console] type: [log4net.Appender.ConsoleAppender]
log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]

它会继续运行,直到它描述了记录器对象的整个实例化。

如何关闭此功能?我可以吗?我已经尝试了各种配置文件设置,但没有什么能让这些消失!呜呜呜……

【问题讨论】:

    标签: logging console log4net


    【解决方案1】:

    设置调试 = 假

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      </configSections>
    
      <log4net debug="false">
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="your file name" />
          <appendToFile value="true" />
          <rollingStyle value="Size" />
          <maxSizeRollBackups value="10" />
          <maximumFileSize value="10MB" />
          <staticLogFileName value="true" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
          </layout>
        </appender>
    
        <root>
          <level value="DEBUG" />
          <appender-ref ref="RollingLogFileAppender" />
        </root>
      </log4net>
    </configuration>
    

    【讨论】:

      【解决方案2】:

      我刚刚遇到了同样的问题(不出所料,这就是我发现这个问题的方式)。

      无论如何,我的问题,也可能是你的问题,是由“&lt;log4net debug=true&gt;”的网络/应用配置文件设置引起的。太明显了吧?我已经从 web sn-p 中粘贴了我的 app.config 设置的骨架,并专注于附加程序,并没有真正让根 log4net 元素再看一眼。但是你现在有了。这在常见问题解答中,但其他东西再次引起了我的注意,而不是这个属性。

      【讨论】:

        【解决方案3】:

        如果你的代码中有这个:

        log4net.Config.BasicConfigurator.Configure();
        

        改成:

        log4net.Config.XmlConfigurator.Configure();
        

        【讨论】:

          【解决方案4】:

          请尝试一次使用新项目复制问题(首先参考不带附加程序的 log4net,然后使用控制台附加程序,然后使用两个附加程序)。如果显示相同的行为,请发布 log4net 的完整配置。

          您也可以尝试使用来自log4net Config Examples page 的配置示例。

          编辑:这可能是这些消息的原因:How do I enable log4net internal debugging

          【讨论】:

            【解决方案5】:

            在我继承的应用程序中,有一行:

            <appSettings>
               <add key="log4net.Internal.Debug" value="true"/>
            

            将其更改为 false 解决了问题。

            【讨论】:

              【解决方案6】:

              您能否提供您的 log4net 配置部分的外观,或者至少您是如何配置它的?我最好的猜测是this answer 是正确的,因为您配置了 log4net 内部调试。要么,要么您的项目中有 log4net 的源代码,并且您正在使用自己的代码编译它。这将导致它获取您的配置并以相同的方式运行它。

              【讨论】:

                【解决方案7】:

                我遇到了和 OP 一样的问题。在 log4net.config 中,我设置了 debug = false。我也有一个定义了 PatternLayout 的 FileAppender 集。当我使用 log.Warn("test") 时,我将预期的格式化结果写入预期的 txt 文件。但是,我也得到了一个更详细的字符串写入控制台(stdout)。

                编辑: 对我来说,解决方法是在我的代码中消除这一行 BasicConfigurator.Configure(); 请注意,我的配置中没有明确告诉 log4net 写入控制台和声明的 FileAppender。实际上,声明了 log4net debug=false 并且问题继续存在。 log4net主页上的示例代码不小心调用了BasicConfigurator.Configure();尽管我确实使用了 log4net,但该库也遇到了许多雄心勃勃的开源项目的相同问题。存在冗长的 XML 驱动配置,为开发人员提供了数以千计的选项来完成真正应该具有更简化的界面的任务。程序员不倾向于珍惜彼此的时间。我们在我们的用户界面中应用“不要让我思考”规则,而不是在我们的机器界面中。就好像我们鄙视一个对良好设计普遍适用的核心原则。复杂性应该可供开发人员使用,但不应浪费几个小时来完成核心功能。考虑到这一点,我会说 log4net 设计不佳。与大多数软件一样,为了复杂性而存在很多复杂性。如果指导项目的开发人员更有才华,那么库的最常见用例(引用然后使用它登录到应用程序文件夹中的文本文件)可以在没有任何先前知识的情况下通过 5-10 分钟的公开来实现。情况并非如此,因为界面设计和配置方法。它突出了我讨厌大多数软件工程师思考方式的原因。他们无法看到最常见用例的简单性的指数价值,而是假设他们使界面越令人费解,它将为其他开发人员增加更多价值。他们受自我和无知的驱使。难怪大多数人都是社会弃儿。

                【讨论】:

                  【解决方案8】:

                  嗯,它确实说根记录器级别设置为调试。如果无法访问您的配置文件或启动日志记录的代码,我猜您正在隐式使用根记录器的默认值,

                  1. 转到命令行 (stdout),然后
                  2. 默认是DEBUG

                  【讨论】:

                    【解决方案9】:

                    请查看log4net faq。它们确实拥有您可能遇到的所有常见陷阱。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-01-06
                      • 2017-11-14
                      • 2015-07-29
                      • 2014-02-27
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-04-29
                      相关资源
                      最近更新 更多