12

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

它会一直持续下去,直到它描述了记录器对象的整个实例化。

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

4

9 回答 9

18

设置调试 = 假

<?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>
于 2010-08-24T10:33:58.307 回答
15

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

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

于 2009-02-13T22:09:48.493 回答
5

如果你的代码中有这个:

log4net.Config.BasicConfigurator.Configure();

将其更改为:

log4net.Config.XmlConfigurator.Configure();
于 2015-11-10T03:03:51.947 回答
3

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

您也可以尝试使用log4net 配置示例页面中的配置示例。

编辑:这可能是这些消息的原因:如何启用 log4net 内部调试

于 2008-12-20T18:18:22.820 回答
2

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

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

改变它来false解决问题。

于 2017-07-05T14:57:07.857 回答
1

Could you provide what your log4net config section looks like, or at least how you have it configured? My best guess is that this answer is correct in that you have log4net internal debugging configured. Either that or you're have the source of log4net in your project and you're compiling it with your own code. That would cause it to pick up your configurations and run it the same way.

于 2009-01-03T06:15:19.513 回答
1

我和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 分钟的公开来实现。情况并非如此,因为界面设计和配置方法。它突出了我讨厌大多数软件工程师思考方式的原因。他们无法看到最常见用例的简单性的指数价值,而是假设他们使界面越令人费解,它将为其他开发人员增加更多价值。他们受自我和无知的驱使。

于 2015-08-04T19:13:21.737 回答
0

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

  1. 转到命令行 (stdout),然后
  2. 默认为 DEBUG
于 2008-12-21T11:40:29.440 回答
0

请查看log4net 常见问题解答。他们确实拥有您可能遇到的所有常见陷阱。

于 2009-01-01T08:54:00.547 回答