我被要求从属性样式配置转移到xml样式。这个过程本身很简单,并没有给我带来任何麻烦,我只是好奇为什么我被问到这个问题,我找到了原因。我找到了这篇不错的帖子Why chose XML over properties files for Log4J configuration?(超过3岁,但仍然是我能找到的最丰富的信息),指向this even older tutorial。他们说
属性可以由属性文件或XML文件定义。
Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件。两者都必须放在src文件夹中。
我检查了一下,与声明相反,发现Log4j首先查找属性文件,第二次查找xml。实际上,如果我将两者保存在同一文件夹中,则输出将根据属性文件进行格式化。那么,我是否误解了这一说法?这完全错了吗?这个声明是针对log4j 1.2.14 进行的,而我在log4j 1.2.17 时,是否有可能log4j团队更改了优先级?我找不到任何相关文档,但由于xml看起来是配置log4j的首选方式,因此它将是一个奇怪的趋势反转
答案 0 :(得分: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。
答案 1 :(得分:1)
根据FrVaBe's answer,PropertyConfigurator类不处理XML可以支持的高级功能。
值得注意的是,一个更有用的高级选项(仅限可用的log4j.xml)是使用LevelMatchFilter和DenyAllFilter
过滤特定日志级别或日志级别范围的功能可以看到一个很好的例子here。