为什么选择XML over属性文件进行Log4J配置?

时间:2009-08-10 19:46:20

标签: java xml logging log4j

是否有任何理由在Log4J配置的属性文件上使用XML?

4 个答案:

答案 0 :(得分:39)

有关merits of both in this blog的有趣讨论。以下部分是该博客的引用:

  

属性可以由属性文件或XML文件定义。 Log4j查找名为log4j.xml的文件,然后查找名为log4j.properties的文件。 两者都必须放在src文件夹中

     

属性文件比XML文件简洁。 XML要求log4j.dtd也放在源文件夹中。 XML需要一个dom4j.jar,它可能不包含在较旧的Java版本中。

     

属性文件不支持某些高级配置选项,如过滤器,自定义ErrorHandler和特殊类型的appender,即AsyncAppender。 ErrorHandlers定义了如何处理log4j本身的错误,例如配置错误的appender。过滤器更有趣。从可用的过滤器中,我认为属性文件确实缺少级别范围过滤器。

     

此过滤器允许定义[n] appender应接收从Level INFO到WARN的日志消息。这允许跨不同的日志文件分割日志消息。一个用于DEBUGGING消息,另一个用于警告,......

     

属性appender仅支持最低级别。如果你设置它做INFO,你也会收到WARN,ERROR和FATAL消息。


解决我原来答案的评论:斜体是我的重点。出于本教程的目的,作者选择掩盖或无意中省略了属性或xml只需要在类路径上而不是需要在src文件夹中。将它们添加到类路径的一种简单方法是将它们添加到src文件夹中,因此出于本教程的目的,显然已经足够了。

这些与提出的问题或答案的意图没有直接关系,即讨论使用xml文件配置log4j的优点或其他方面。我认为引用的其余部分对于那些希望做出明智选择的人来说是相关且有用的。

答案 1 :(得分:9)

log4j正逐渐转向XML,因此属性是传统格式。

某些新功能只能在XML中配置。我被迫切换到XMl,因为我需要使用TimeBasedRollingPolicy。

然而,XML非常冗长。我还是尽可能地使用属性。

答案 2 :(得分:3)

嗯,你只能在xml配置中做的一件事是设置一个记录器来使用缓冲(使用org.apache.log4j.AsyncAppender)。

但是,如果您需要更多功能,您可能还需要查看logback,其中包含对log4j的其他一些改进。

答案 3 :(得分:3)

Perf4j(http://perf4j.codehaus.org)是一个非常好的性能监控系统,它与log4j一起配置并与之协同工作,需要log4j.xml文件。
因此,如果您打算使用perf4j(我推荐),则需要xml格式。