【问题标题】:Log4Net log showing up in console windowLog4Net 日志显示在控制台窗口中
【发布时间】:2011-06-02 00:19:55
【问题描述】:

我遇到的问题与大多数人使用 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>

【问题讨论】:

  • 我在一个全新的控制台项目中使用了上述配置,它做同样的事情。只有一个附加程序,它仍然发送到控制台窗口。是什么赋予了? ://
  • 认为这里缺少的部分是创建记录器实例的代码,他可能和我有类似的问题stackoverflow.com/a/18122298/427684

标签: c# log4net log4net-configuration


【解决方案1】:

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

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

【讨论】:

  • 我查过了,Logger 类只是调用 log.Info 或 log.Error
  • @Tom Whitaker - 这听起来很疯狂,但你确定你是从正确的配置文件中提取的吗?也许你有一个旧的配置文件存储在其他地方被拾取而不是你认为正在被读取的那个。
  • 啊啊啊啊。这是问题吗? // 配置日志记录 log4net.Config.BasicConfigurator.Configure();
  • 改为:log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net.config"));现在可以了,谢谢大家
【解决方案2】:

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

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

  • 您在任何&lt;logger&gt;&lt;root&gt; 部分下都列出了控制台附加程序
  • 您以编程方式注册控制台附加程序
  • 您有一个记录器包装器,它始终在记录之前运行 Console.Write 行

【讨论】:

  • 我的 assembly.cs 有:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 我的记录器初始化如下: private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);不幸的是,这三个想法都没有:/
  • 是的,只有上面粘贴的配置中的一个引用
  • @Tom Whitaker - 我拿走了你的配置文件和你提供的设置。我可以看到 milliondollars.log 文件已创建并在其中测试日志行。同时,控制台窗口中没有任何内容。你能尝试从头开始创建一个简单的项目,看看你是否有同样的问题?
【解决方案3】:

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

        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/

【讨论】:

    猜你喜欢
    • 2011-01-27
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多