【问题标题】:In Log4Net XML configuration is Priority the same thing as Level?在 Log4Net XML 配置中,优先级与级别相同吗?
【发布时间】:2014-08-02 02:12:51
【问题描述】:

我继承了一些在其 xml 配置中使用根下优先级元素的代码。这就像http://iserialized.com/log4net-for-noobs/ 的示例一样:

<root>
 <priority value="ALL" />
 <appender-ref ref="LogFileAppender" />
 <appender-ref ref="ConsoleAppender"/>
</root>

但是,http://logging.apache.org/log4net/release/manual/configuration.html 的 log4net 配置示例总是使用 level 元素显示它:

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

在这种类型的配置中是

<priority>

一样
<level>

?

有人可以指出我在文档中的某个地方对此进行了解释吗?

【问题讨论】:

    标签: xml logging log4net log4net-configuration


    【解决方案1】:

    log4net 中的 Logger 类上没有 Priority 属性。我能找到的Priority 的唯一实例是在SmtpAppender 中。所以进入我的代码!

    XmlHierarchyConfiguratorParseChildrenOfLoggerElement 方法中,您会发现以下代码:

    if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority")
    {
        this.ParseLevel(xmlElement, log, isRoot);
    }
    

    啊!两个值都被解析为相同的属性(ParseLevel 方法并没有真正做太多,除了分配、记录和管理“继承”值,这是一个可能的级别)所以你有了它; “级别”和“优先级”对您的配置有完全相同的影响。我想这样做是为了保持与以前版本的库的某种向后兼容性,实际上this article about log4j 支持:

    在 log4j 的早期版本中,这些被称为类别和优先级, 但现在它们分别称为 logger 和 level。

    确实,如果我们搜索“类别”,XmlHierarchyConfigurator 中有一个Configure 方法,其中包含以下代码:

    // ...
    XmlElement xmlElement = (XmlElement)xmlNode;
    if (xmlElement.LocalName == "logger")
    {
        this.ParseLogger(xmlElement);
    }
    else
    {
        if (xmlElement.LocalName == "category")
        {
            this.ParseLogger(xmlElement);
        }
        else
        {
            if (xmlElement.LocalName == "root")
            {
                this.ParseRoot(xmlElement);
            }
        // ...
    

    就是这样:级别和优先级可以互换,记录器和类别也是如此。

    有趣的花絮:最后一个属性获胜,并且对于您可以在记录器上拥有的属性数量没有限制,因此这是有效的并将级别设置为 DEBUG

    <root>
     <priority value="ALL" />
     <priority value="ERROR" />
     <level value="DEBUG" />
    </root>
    

    【讨论】:

    • 哇。谢谢。而且,你的“有趣的花絮”解释了我的下一个谜团。我继承的配置文件之一在根目录下有两个优先级元素。我假设“最后一个属性获胜”并且测试验证了这一点,但感谢您的洞察力。
    • 不客气,这是一个有趣的分析,我已经从这个答案中获得了一些关于配置解析的建议:stackoverflow.com/questions/23634472/…
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多