Log4j 2配置:XML vs JSON?

时间:2014-12-01 08:41:51

标签: xml json logging log4j log4j2

Apache manual只是说:“

  

Log4j 2的配置可以通过以下四种方式之一完成:
  通过用XML,JSON或YAML编写的配置文件   以编程方式,通过创建ConfigurationFactory和Configuration实现   以编程方式,通过调用Configuration接口中公开的API将组件添加到默认配置   以编程方式,通过调用内部Logger类的方法。

ID'想知道是否有明显的趋势支持这四种方式中的一种?
这个问题的背后是将Log4j(版本1)配置实践从.properties文件转换为XML格式。搜索问题的答案并获得正确的答案却非常令人沮丧,但不完全是您正在使用的配置方法。

我有一个新的log4j(版本2)项目即将发布,我想使用JSON作为配置格式来对抗默认的XML方式(原因:美观和轻微的性能优势(?))。

如果我选择基于XML的JSON配置格式,是否会遇到问题或者没有获得多少功能?

使用编程方法而不是静态配置文件的任何理由?

用例(理想情况下)应用程序服务器(从服务器上的某个文件路径)读取单个配置文件。然后,此单个.json文件将用于为每个应用程序应用日志级别,并为每个应用程序生成至少3个不同的日志(常规,错误,自定义日志级别)。设计用于在服务器上运行的应用程序不到10个。

1 个答案:

答案 0 :(得分:6)

使用XML或JSON没有性能优势或劣势。我个人更喜欢XML这两个原因:(但它们不是很大的问题,所以当然这取决于你......)

  • JSON配置需要类路径中的Jackson jar文件,因此存在额外的依赖性。 XML使用内置于Java的XML解析器。
  • log4j2手册中的所有示例都使用XML,而不是JSON,因此您需要转换语法。如果选择XML,则可以从手册中复制粘贴。

我不推荐编程配置。它更复杂,取决于实现细节,将来可能会发生变化。恕我直言,这将是一堆很少或没有任何好处的工作。

对于您描述的用例,您可以在配置中使用system properties,这样多个应用可以共享相同的配置,但可以通过更改每个应用的属性值来登录到不同的位置。


更新:

Log4j2在以后的版本中添加了API for programmatic configuration。此API不公开实现细节。但是它最适合从头开始配置。如果要修改现有配置,则需要使用实现类。