在Log4Net XML配置中,优先级与级别是否相同?
我继承了一些在xml配置中使用根目录下的priority元素的代码。这就像示例中显示的:在Log4Net XML配置中,优先级与级别是否相同?,xml,logging,log4net,log4net-configuration,Xml,Logging,Log4net,Log4net Configuration,我继承了一些在xml配置中使用根目录下的priority元素的代码。这就像示例中显示的: <root> <priority value="ALL" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender"/> </root> 始终使用级别元素显示它: <root> <level value="DEBUG" /&
<root>
<priority value="ALL" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender"/>
</root>
始终使用级别元素显示它:
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
在这种类型的配置中
<priority>
同
<level>
?
有人能告诉我文档中解释这一点的地方吗?log4net中的Logger
类上没有Priority
属性。我能找到的Priority
的唯一实例是SmtpAppender
。所以我进入了代码
在XmlHierarchyConfigurator
的ParseChildrenOfLoggerElement
方法中,您将找到以下代码:
if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority")
{
this.ParseLevel(xmlElement, log, isRoot);
}
// ...
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);
}
// ...
啊!!这两个值被解析为同一个属性(除了分配、记录和管理“继承的”值(这是一个可能的级别)之外,ParseLevel
方法实际上没有什么作用,所以您就有了它“级别”和“优先级”对配置的影响完全相同。我想这样做是为了保持与该库以前版本的某种向后兼容性,事实上,它得到了以下方面的支持:
在log4j的早期版本中,这些被称为类别和优先级,
但现在它们分别被称为logger和level
实际上,如果我们搜索“category”,则XmlHierarchyConfigurator
中有一个Configure
方法,其中包含以下代码:
if (xmlElement.LocalName == "level" || xmlElement.LocalName == "priority")
{
this.ParseLevel(xmlElement, log, isRoot);
}
// ...
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);
}
// ...
就是这样:级别和优先级是可互换的,记录器和类别也是可互换的
有趣的花絮:最后一个属性获胜,并且您可以在记录器上拥有的属性数量没有限制,因此这是有效的,并将设置调试级别
<root>
<priority value="ALL" />
<priority value="ERROR" />
<level value="DEBUG" />
</root>
Wow。谢谢还有,你的“有趣的花絮”解释了我的下一个谜团。我继承的一个配置文件在根目录下有两个优先级元素。我假设“last property wins”和测试验证了这一点,但感谢您的洞察力。不客气,这是一个有趣的分析,我已经从这个答案中得到了一些关于配置解析的建议: