如何从 logback 中的 Java stacktraces 中删除换行符?
How do I remove newline from Java stacktraces in logback?
我正在尝试从 Java 堆栈跟踪中删除换行符。
我遵循了 logback 模式 -
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern>
我希望它能替换消息中的换行符,但它并没有这样做。我看到用换行符打印出来的堆栈跟踪。
但是,如果我使用以下模式(仅用于测试目的)-
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern>
我发现消息被替换为字符 x,但堆栈跟踪仍按原样打印。
这让我相信 logback 会独立处理堆栈跟踪。
我已经阅读了 logback 文档,它说可以通过 (%ex) 引用 stacktraes。
但是,对于 appender,我一次只能激活一个模式。
我该如何确保我不会在堆栈跟踪中换行?
在查看了 Logback 格式化程序如何在我的 Windows 框中构建字符串后,我看到堆栈跟踪包含每个新行的 \r\n
,因此如果您使用 Windows ,试试这个:
<pattern>........ %replace(%ex){'[\r\n]+', '\n'}%nopex%n</pattern>
解释:
\r\n
:起初我只尝试使用 %replace(%ex){'\n', 'X'}
但后来我在日志中有了换行符然后是 'X'。相反,使用 %replace(%ex){'[\r\n]+', ''}
会删除所有出现的 \r
和 \n
。如果要显示字符串 "\n"
以表示此处换行,可以在 %replace
第二个参数中添加 '\n'
%nopex
:我不知道为什么,但是如果你在 %ex
上使用 %replace
,Logback 会在你的条目中添加第二个堆栈跟踪,这所有新线路的时间。使用 %nopex
(参见 documentation),它将通过伪造使用没有任何 %replace
.
的实际堆栈来抑制第二个堆栈
我正在尝试从 Java 堆栈跟踪中删除换行符。
我遵循了 logback 模式 -
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern>
我希望它能替换消息中的换行符,但它并没有这样做。我看到用换行符打印出来的堆栈跟踪。
但是,如果我使用以下模式(仅用于测试目的)-
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern>
我发现消息被替换为字符 x,但堆栈跟踪仍按原样打印。
这让我相信 logback 会独立处理堆栈跟踪。 我已经阅读了 logback 文档,它说可以通过 (%ex) 引用 stacktraes。
但是,对于 appender,我一次只能激活一个模式。 我该如何确保我不会在堆栈跟踪中换行?
在查看了 Logback 格式化程序如何在我的 Windows 框中构建字符串后,我看到堆栈跟踪包含每个新行的 \r\n
,因此如果您使用 Windows ,试试这个:
<pattern>........ %replace(%ex){'[\r\n]+', '\n'}%nopex%n</pattern>
解释:
\r\n
:起初我只尝试使用%replace(%ex){'\n', 'X'}
但后来我在日志中有了换行符然后是 'X'。相反,使用%replace(%ex){'[\r\n]+', ''}
会删除所有出现的\r
和\n
。如果要显示字符串"\n"
以表示此处换行,可以在%replace
第二个参数中添加'\n'
%nopex
:我不知道为什么,但是如果你在%ex
上使用%replace
,Logback 会在你的条目中添加第二个堆栈跟踪,这所有新线路的时间。使用%nopex
(参见 documentation),它将通过伪造使用没有任何%replace
. 的实际堆栈来抑制第二个堆栈