Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么log4j2在使用%replace时打印双堆栈跟踪?_Log4j - Fatal编程技术网

为什么log4j2在使用%replace时打印双堆栈跟踪?

为什么log4j2在使用%replace时打印双堆栈跟踪?,log4j,Log4j,我的用例是去掉stacktrace中的新行。不幸的是,分隔符()不起作用,因为出于某种原因,它在跟踪中只留下一行(确切地说是一行) 因此,我尝试的是应用替换管道 appender.rolling.layout.pattern = { %-5level %logger{36} - %message}%n 结果:将每个stacktrace行打印到新行中 appender.rolling.layout.pattern = { %-5level %logger{36} - %message %repl

我的用例是去掉stacktrace中的新行。不幸的是,分隔符()不起作用,因为出于某种原因,它在跟踪中只留下一行(确切地说是一行)

因此,我尝试的是应用替换管道

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将自动打印堆栈跟踪,除非它在模式中检测到一个可丢弃的转换说明符。我的猜测是,它并不是在另一个转换说明符中寻找可丢弃的转换说明符。您的变通方法是处理此问题的正确方法