use*_*868 8 java regex logback
我正在尝试从Java堆栈中删除换行符.
我遵循了logback模式 -
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', ''}%n</pattern>
Run Code Online (Sandbox Code Playgroud)
我希望它能替换消息中的换行符,但它没有这样做.我看到用新行打印出的stacktraces.
但是,如果我使用以下模式(仅用于测试目的) -
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'.*', 'x'}%n</pattern>
Run Code Online (Sandbox Code Playgroud)
我发现消息正在被字符x替换,但堆栈跟踪仍然按原样打印.
这让我相信logback会独立地处理堆栈跟踪.我已经通过了logback文档,它说可以通过(%ex)引用stacktraes.
但是,我一次只能为一个appender激活一个模式.我如何确保我没有在stacktraces中获取换行符?
xav*_*xav 13
在查看Logback格式化程序如何在我的Windows框中构建字符串之后,我看到\r\n每个新行都包含堆栈跟踪,因此如果您使用的是Windows,请尝试以下方法:
<pattern>........ %replace(%ex){'[\r\n]+', '\\n'}%nopex%n</pattern>
Run Code Online (Sandbox Code Playgroud)
说明:
\r\n :起初我只尝试过,%replace(%ex){'\n', 'X'} 但后来我在日志中输入了新的字符然后是'X'.相反,使用%replace(%ex){'[\r\n]+', ''}删除所有出现的\r和\n.如果你想显示的字符串"\n"来表示一个新的生产线在这里,您可以添加'\\n'在%replace第二个参数.
%nopex:我不知道为什么,但如果你使用%replace上%ex,增加的logback第二堆栈跟踪您的项目,此时所有的新生产线.使用%nopex(参见文档),它将通过伪造使用没有任何实际堆栈来抑制第二个堆栈%replace.
| 归档时间: |
|
| 查看次数: |
5904 次 |
| 最近记录: |