【问题标题】:Change log level in log4net for one class without adding an appender在不添加附加程序的情况下更改一个类的 log4net 中的日志级别
【发布时间】:2015-02-02 04:22:41
【问题描述】:

我的应用程序记录到控制台和文件(log4net 1.2.11):

<root>
  <level value="DEBUG" />
  <appender-ref ref="ConsoleAppender" />
  <appender-ref ref="RollingLogFileAppender" />
</root>

我想更改一个类的配置,以便它将所有消息记录到文件中,并将除调试消息之外的所有消息记录到控制台。我可以在不为我的班级添加专用附加程序并且不更改根配置的情况下做到这一点吗?在记录器的 appender-ref 级别上?

this answer 的启发,我尝试了下面的代码但没有成功(包括调试在内的所有消息都记录到两个附加程序):

<logger name="MyClass" additivity="false">
  <appender-ref ref="ConsoleAppender">
    <threshold value="INFO" />
  </appender-ref>
  <appender-ref ref="RollingLogFileAppender" />
</logger>

这也失败了(它从所有附加程序中排除了调试,我想要文件中的调试消息):

<logger name="MyClass">
  <level value="INFO" />
</logger>

【问题讨论】:

    标签: .net logging log4net


    【解决方案1】:

    你不走运,当 log4net 解析 appender-ref 标记时,它不会将任何信息传递给按名称引用的附加程序(代码来自 1.2.10):

    // log4net.Repository.Hierarchy.XmlHierarchyConfigurator
    if (xmlElement.LocalName == "appender-ref")
    {
        IAppender appender = this.FindAppenderByReference(xmlElement);
        string attribute = xmlElement.GetAttribute("ref");
        if (appender != null)
        {
            LogLog.Debug(string.Concat(new string[]
            {
                "XmlHierarchyConfigurator: Adding appender named [",
                attribute,
                "] to logger [",
                log.Name,
                "]."
            }));
            log.AddAppender(appender);
        }
        else
        {
            LogLog.Error("XmlHierarchyConfigurator: Appender named [" + attribute + "] not found.");
        }
    }
    

    我很确定您链接到的答案并没有真正起作用; Treshold 属性存在于 appender 中,但未在 ref 节点中解析。

    哪一个才是最好的——如果记录器可以从它的引用中更改某些附加程序属性,你能想象配置的噩梦吗?最后一个被解析的记录器将赢得配置并祝你好运跟踪为什么你的调试附加器现在保持沉默,因为其他一些记录器交换了阈值:)

    所以你必须添加另一个附加程序;如果您不想复制粘贴 RollingLogFileAppender 配置,则可以使用 forwarding appender 在将消息传递到其自己引用的附加程序之前用作过滤器。你最终会得到

    • 根日志 -> ConsoleAppender
    • 根日志 -> RollingFileAppender
    • MyClass -> 带过滤器的 ForwardingAppender -> ConsoleAppender
    • MyClass -> RollingFileAppender

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多