为什么log4j2在使用%replace时打印双堆栈跟踪?
我的用例是去掉stacktrace中的新行。不幸的是,分隔符()不起作用,因为出于某种原因,它在跟踪中只留下一行(确切地说是一行) 因此,我尝试的是应用替换管道为什么log4j2在使用%replace时打印双堆栈跟踪?,log4j,Log4j,我的用例是去掉stacktrace中的新行。不幸的是,分隔符()不起作用,因为出于某种原因,它在跟踪中只留下一行(确切地说是一行) 因此,我尝试的是应用替换管道 appender.rolling.layout.pattern = { %-5level %logger{36} - %message}%n 结果:将每个stacktrace行打印到新行中 appender.rolling.layout.pattern = { %-5level %logger{36} - %message %repl
appender.rolling.layout.pattern = { %-5level %logger{36} - %message}%n
结果:将每个stacktrace行打印到新行中appender.rolling.layout.pattern = { %-5level %logger{36} - %message %replace{%xThrowable}{[\r\n]+}{}}%n
结果:成功删除新行并打印堆栈跟踪,但它也会在新行仍在appender.rolling.layout.pattern = { %-5level %logger{36} - %message %replace{%xThrowable}{[\r\n]+}{}}%n
我的解决方案:
appender.rolling.layout.pattern = { %-5level %logger{36} - %message %xThrowable{0} %replace{%xThrowable}{[\r\n]+}{}}%n
结果:只打印一次stacktrace,不打印新行appender.rolling.layout.pattern = { %-5level %logger{36} - %message %replace{%xThrowable}{[\r\n]+}{}}%n
发生了什么事
为什么replace命令将stacktrace加倍?为什么%xThrowable{0}只删除一个堆栈跟踪,而不是全部删除?PatternLayout将自动打印堆栈跟踪,除非它在模式中检测到一个可丢弃的转换说明符。我的猜测是,它并不是在另一个转换说明符中寻找可丢弃的转换说明符。您的变通方法是处理此问题的正确方法