log4j EnhancedPatternLayout和PatternLayout之间的主要区别是什么?

gojuced7  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(186)

在检查PatternLayout的javadoc时,我注意到它建议使用EnhancedPatternLayout代替。
主要的区别是什么,尤其是我需要注意的区别?
我也想知道为什么他们做了一个单独的类,而不是增强原来的类。语法上有什么不同吗?

lrl1mhuk

lrl1mhuk1#

检查documentation,一切都解释清楚了。EnhancedPatternLayoutPatternLayout的增强版本。应该优先于PatternLayout使用它(与PatternLayout兼容的原因除外)。
PatternLayout包含一些EnhancedPatternLayout中不存在的问题,尤其是在同步时。

1dkrff03

1dkrff032#

PatternLayoutEnhancedPatternLayout之间的主要区别在于format()方法。PatternLayout依赖于一个名为sbuf的成员字段,而EnhancedPatternLayout使用StringBuffer的私有示例。这意味着PatternLayout.format()调用在并发调用期间容易受到数据争用的影响,而并发EnhancedPatternLayout.format()调用则不会。

pkwftd7m

pkwftd7m3#

EnhancedPatternLayout会将结果格式化为StringBuffer,而PatternLayout则会将结果格式化为String。

n3schb8v

n3schb8v4#

我在两个HTML页面上做了一个比较。

以下是对我来说的主要区别:介绍和两个新的“转换字符“:%properties%throwable
我已重新编排了文本的格式以提高可读性。

1.简介

这个类是org.apache.log4j.PatternLayout的增强版本,org.apache.log4j.PatternLayout最初是作为被放弃的log4j 1.3工作的一部分开发的,并且已经在extras配套中提供。
此模式布局应优先于org.apache.log4j.PatternLayout使用,除非PatternLayout已通过子类化或替代模式解析器进行了扩展。

2. %properties

用于输出与日志记录事件关联的属性。

properties转换字后面可以跟放在大括号之间的Map的键,如%properties{application},其中application是键。将输出Properties包中与该键对应的值。如果未指定其他子选项,则使用{{key1,val1},{key2,val2}}输出Properties键值对集的整个内容

3. %throwable

(重新格式化以便于阅读。)
用于输出已绑定到LoggingEvent的Throwable跟踪,默认情况下,这将输出完整跟踪,就像通常通过调用Throwable.printStackTrace()找到的跟踪一样。

  • %throwable{short}%throwable{1}将输出堆栈跟踪的第一行。
  • throwable{none}throwable{0}将抑制堆栈跟踪。
  • %throwable{n}将输出n行堆栈跟踪(如果是正整数),或忽略最后-n行(如果是负整数)。
  • 如果没有指定%throwable模式,则追加器将负责输出它认为合适的堆栈跟踪。

相关问题