没有Priority
财产在Logger
log4net 中的类。唯一的实例是Priority
我可以找到在SmtpAppender
。所以我进入了代码!
In the ParseChildrenOfLoggerElement
的方法XmlHierarchyConfigurator
你会发现下面的代码:
if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority")
{
this.ParseLevel(xmlElement, log, isRoot);
}
啊!两个值都解析为相同的属性(ParseLevel
方法实际上并没有做太多事情,除了分配、记录和管理“继承”值(这是一个可能的级别),所以你已经有了它;“级别”和“优先级”对您的配置具有完全相同的效果。我猜这样做是为了保持与该库的先前版本的某种向后兼容性,这实际上是由这篇关于 log4j 的文章 http://en.wikipedia.org/wiki/Log4j#Configuration_of_log4j_1.2:
在 log4j 的早期版本中,这些被称为类别和优先级,
但现在它们分别称为记录器和级别。
事实上,如果我们搜索“类别”,就会有一个Configure
方法中的XmlHierarchyConfigurator
其中包含以下代码:
// ...
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>