为什么需要日志自动换行?
在使用 Logback 输出日志时,如果日志内容较长(如 JSON、异常堆栈等),默认情况下会输出为一行,导致在终端或日志文件中难以阅读和排查问题。
通过合理配置 PatternLayout,我们可以实现日志内容的自动换行,提升可读性。
解决方案:使用 %replace 实现自动换行
Logback 提供了 %replace 转换词,可以对日志内容进行正则替换。我们可以利用它将长日志中的特定字符(如逗号、大括号)后插入换行符。
以下是一个典型的配置示例(在 logback.xml 中):
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %replace(%msg){'\n', '\\n'}%nopex%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
高级技巧:对 JSON 日志格式化换行
如果你输出的是 JSON 格式的日志,可以结合正则表达式在 {、[、, 后添加换行:
%replace(%msg){'([{}\\[\\],])', '$1\\n'}
注意:此方法适用于简单场景,复杂 JSON 建议在代码层使用 Jackson 等库格式化后再输出。
注意事项
- 频繁使用
%replace可能影响性能,建议仅在开发或调试环境启用。 - 确保日志查看工具支持多行显示(如 VS Code、tail、less 等)。
- 生产环境中可考虑使用结构化日志(如 JSON)配合 ELK 等日志系统。