log4j.properties vs log4j.xml

Tha*_*ish 35 log4j

我被要求从属性样式配置转移到xml样式.这个过程本身很简单,并没有给我带来任何麻烦,我只是好奇为什么我被问到这个问题,我找到了原因.我找到了这篇不错的帖子为什么选择XML over Log4J配置的属性文件?(超过3年,但仍然是我能找到的最丰富的信息),这指向了这个更老的教程.他们说

属性可以由属性文件或XML文件定义.

Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件.两者都必须放在src文件夹中.

我检查了一下,与声明相反,发现Log4j首先查找属性文件,第二次查找xml.实际上,如果我将两者保存在同一文件夹中,则输出将根据属性文件进行格式化.那么,我是否误解了这一说法?这完全错了吗?这个语句是针对log4j 1.2.14进行的,而我在log4j 1.2.17上,是否有可能log4j团队改变了优先级?我找不到任何相关文档,但由于xml看起来是配置log4j的首选方式,因此它将是一个奇怪的趋势反转

FrV*_*aBe 22

看看JavaDoc.PropertyConfiguratorClass(log4j.properties)的文档指出了这一点

PropertyConfigurator不处理DOMConfigurator支持的高级配置功能,例如支持自定义ErrorHandlers,嵌套的appender,如AsyncAppender等.

因此DOMConfigurator(log4j.xml)提供了高级选项.

除此之外,您可以使用提供的log4j.dtd对log4j.xml文件进行(至少一个简单的)有效性检查.

如果您不使用高级功能,则无需从属性更改为xml文件.

你真正应该考虑的是从log4j更改为log4j 2 beta甚至是 slf4j.log4j的开发已经停止,它的创始人(@Ceki)发明了slf4j.

  • 但是sl4j只是一个外观它不是一个日志框架所以你不能从log4j更改为sl4j但是将它添加到它上面,sl4j的强大之处在于它允许你通过更改一个jar文件从一个日志框架切换到另一个日志框架无论什么时候需要它.它是一个抽象层,因此如果您包含使用不同日志框架的不同库或工具,只要他们使用slf4j共享您的配置,它们就可以共存. (3认同)