我被要求从移动性风格的配置,以XML风格。 这个过程本身很简单,它不会导致我带来任何麻烦,我只是好奇,为什么我被问这个,我找的理由。 我发现这个不错的职位为什么选择在XML属性文件的log4j的配置? (超过3岁,但仍然是最翔实我能找到),这是指向指向这个更老的教程 。 他们陈述
性能可以通过一个属性文件或由XML文件中定义。
Log4j的寻找一个log4j.xml文件,然后命名为log4j.properties文件命名的文件。 两者都必须被放置在src文件夹。
我检查出来,并违背了声明,发现,Log4j的第一次查找属性文件,并在第二次XML。 事实上,如果我在同一个文件夹中保留两个,输出根据属性文件格式。 所以,我是误解了声明? 难道仅仅错了吗? 该语句已取得了log4j的1.2.14,而我在log4j的1.2.17,是有可能的log4j的团队改变了优先级? 我找不到任何相关文件,但是这将是一个奇怪的趋势反转,因为XML看起来是配置Log4j的首选方式
看一看的Javadoc。 该的文档PropertyConfiguratorClass (log4j.properties)指出,
该PropertyConfigurator不处理由DOMConfigurator支持的高级配置功能,如支持自定义ErrorHandlers,嵌套的附加目的地如AsyncAppender等。
所以DOMConfigurator (的log4j.xml)提供高级选项。
除此之外,你可以有(至少一个简单的)有效性的使用提供的log4j.xml文件检查log4j.dtd 。
如果你几乎不使用高级功能就不用从性质改变为XML文件。
你真正应该思考的是,从log4j的改变的log4j 2测试版 ,甚至SLF4J 。 log4j的发展已经停止,它(@Ceki)的创始人发明了SLF4J。
按照FrVaBe的回答中,PropertyConfigurator类不处理XML可以支持高级功能。
值得一提的更有用的高级选项(仅适用的log4j.xml)一种是对一个特定的日志级别或使用LevelMatchFilter和DenyAllFilter日志级别的范围来过滤能力
一个很好的例子可以看出这里 。