如何禁用log4net状态消息到控制台?

时间:2008-12-19 22:55:27

标签: logging console log4net

我在.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]

并且它一直持续到它描述记录器对象的整个实例化为止。

如何关闭此功能?我可以吗?我已经尝试了各种配置文件设置,但没有什么能让它们消失!哎呀...

9 个答案:

答案 0 :(得分:17)

设置debug = false

<?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>

答案 1 :(得分:15)

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

无论如何,我的问题,也可能是你的问题,是由网页/应用配置文件设置“< log4net debug = true >”引起的。太明显了吧?我已经从web片段粘贴了我的app.config设置的骨架,并专注于appender,而不是真正给root log4net元素第二眼。但是你现在有了。这是在常见问题解答中,但其他一些事情引起了我的注意而不是这个属性。

答案 2 :(得分:3)

请尝试一步一步地使用新项目复制问题(首先引用没有appender的log4net,然后使用控制台appender,然后使用两个appender)。如果它显示相同的行为,请发布log4net的完整配置。

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

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

答案 3 :(得分:2)

如果您的代码中有此内容:

log4net.Config.BasicConfigurator.Configure();

将其更改为:

log4net.Config.XmlConfigurator.Configure();

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:0)

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

  1. 转到命令行(stdout)和
  2. 默认为DEBUG

答案 7 :(得分:0)

请查看log4net faq。他们真的遇到了你可能遇到的所有常见陷阱。

答案 8 :(得分:0)

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

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