覆盖率最好的Log4j2配置格式
Log4j2 configuration format with best coverage
Log4j2 目前支持 4 种配置格式[1]:XML、JSON、YAML 和属性语法。我无法在文档中找到所有格式在功能覆盖方面是否完全相同。
是否可以在每种格式中使用 Log4j2 的所有功能,或者某些格式缺乏表现力?
我依稀记得过去我在 属性 语法中设置一个功能时遇到了一些麻烦,而它在 XML 语法中工作;这可能是我当时缺乏知识而不是缺少功能,但如果有人可以提供有关是否等效的参考,那将会有所帮助。
[1] https://logging.apache.org/log4j/2.x/manual/configuration.html#
这应该比我在这里给出的答案更长。
问题的答案是,从 Log4j 的角度来看,它们都是等价的。但从用户的角度来看,他们不是。
通常,XML 文件允许任何可以表示为 XML 属性的内容也可以指定为 XML 元素。所以在 PatternLayout 上你可以做:
log4j 配置是分层的。例如,所有 Logger 元素都配置在 Loggers 元素下。 Logger 的特定配置位于该 Logger 元素内。 XML、JSON 和 YAML 本质上都是分层的。属性不是。要模拟该层次结构,您必须在每个元素前加上树中位于它之前的元素的名称。这可能会变得混乱,这就是为什么我从不使用属性语法并且一开始就拒绝实施它的原因。
属性格式是唯一不需要 java.base 之外的任何依赖项的格式(在 Java 9+ 术语中)。不幸的是,XML 不是 Java 9+ 中最小 Java 分布的一部分,而 JSON/YAML 从来没有。
所以是的,您应该能够以任何格式表达任何配置,但弄清楚它在属性格式中应该是什么有时需要以其他格式之一表达它,这样您才能弄清楚是什么属性 等效语法应该是。
Log4j2 目前支持 4 种配置格式[1]:XML、JSON、YAML 和属性语法。我无法在文档中找到所有格式在功能覆盖方面是否完全相同。
是否可以在每种格式中使用 Log4j2 的所有功能,或者某些格式缺乏表现力?
我依稀记得过去我在 属性 语法中设置一个功能时遇到了一些麻烦,而它在 XML 语法中工作;这可能是我当时缺乏知识而不是缺少功能,但如果有人可以提供有关是否等效的参考,那将会有所帮助。
[1] https://logging.apache.org/log4j/2.x/manual/configuration.html#
这应该比我在这里给出的答案更长。
问题的答案是,从 Log4j 的角度来看,它们都是等价的。但从用户的角度来看,他们不是。
通常,XML 文件允许任何可以表示为 XML 属性的内容也可以指定为 XML 元素。所以在 PatternLayout 上你可以做:
log4j 配置是分层的。例如,所有 Logger 元素都配置在 Loggers 元素下。 Logger 的特定配置位于该 Logger 元素内。 XML、JSON 和 YAML 本质上都是分层的。属性不是。要模拟该层次结构,您必须在每个元素前加上树中位于它之前的元素的名称。这可能会变得混乱,这就是为什么我从不使用属性语法并且一开始就拒绝实施它的原因。
属性格式是唯一不需要 java.base 之外的任何依赖项的格式(在 Java 9+ 术语中)。不幸的是,XML 不是 Java 9+ 中最小 Java 分布的一部分,而 JSON/YAML 从来没有。
所以是的,您应该能够以任何格式表达任何配置,但弄清楚它在属性格式中应该是什么有时需要以其他格式之一表达它,这样您才能弄清楚是什么属性 等效语法应该是。