【问题标题】:Log4j 2 configuration: XML vs JSON?Log4j 2 配置:XML 与 JSON?
【发布时间】:2014-12-01 08:41:50
【问题描述】:

Apache manual 简单地说:“

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

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

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

如果我选择 JSON 配置格式而不是 XML,我会遇到问题或无法获得尽可能多的功能吗?

有什么理由使用编程方法而不是静态配置文件?

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

【问题讨论】:

    标签: xml json logging log4j log4j2


    【解决方案1】:

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

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

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

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


    更新:

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

    【讨论】:

    • 我想我必须同意,更广泛的支持胜过“我不喜欢 XML 的外观”的论点;]。感谢系统属性提示!看起来我可以使用的东西,必须进一步调查。
    • 很高兴能提供帮助。值得一提的是,log4j2 xml 语法比 log4j-1.2 干净得多。
    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多