在Log4Net中,XML配置优先级与Level相同吗?

时间:2014-06-11 21:20:30

标签: xml logging log4net log4net-configuration

我继承了一些代码,它在xml configuraiton的根目录下使用了priority元素。这就像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>

有人能指出我在文档中某处解释过吗?

1 个答案:

答案 0 :(得分:18)

log4net中的Priority类没有Logger属性。我能找到的唯一Priority实例位于SmtpAppender。所以我去了代码!

ParseChildrenOfLoggerElement的{​​{1}}方法中,您会找到以下代码:

XmlHierarchyConfigurator

啊!这两个值都被解析为相同的属性(if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority") { this.ParseLevel(xmlElement, log, isRoot); } 方法除了分配,记录和管理&#34;继承的&#34;值(这是一个可能的级别)之外,并没有真正做很多事情。所以你有它;的&#34;电平&#34;和&#34;优先&#34;对您的配置具有完全相同的效果。我想这是为了保持与先前版本的库的某种向后兼容性,事实上this article about log4j支持它:

  

在log4j的早期版本中,这些被称为类别和优先级,   但现在他们分别称为记录器和级别。

的确,如果我们搜索&#34;类别&#34;,ParseLevel中有一个Configure方法,其中包含以下代码:

XmlHierarchyConfigurator

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

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

// ...
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);
        }
    // ...