我继承了一些代码,它在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>
有人能指出我在文档中某处解释过吗?
答案 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);
}
// ...