You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.6.5中exception-conversion-word致日志行合并问题

问题:Spring Boot 2.6.5 异常日志单行化后合并后续日志行

使用Spring Boot 2.6.5,通过application.properties配置logging.level.exception-conversion-word结合logback.xml,将异常日志的换行替换为特殊字符实现单行化,但出现异常日志的下一条日志行被合并到异常行末尾的问题。

当前配置

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

application.properties

logging.level.exception-conversion-word: "%replace(%wEx){'\n','\u2028'}%nopex"

异常现象

异常日志换行被替换为单行符合预期,但后续日志直接附加在异常行末尾,示例如下:

2023-08-15 14:09:12.337  INFO 31216 --- [azure.com:10255] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server mongodb-abcde-westus.mongo.cosmos.azure.com:10255
com.mongodb.MongoSocketException: mongodb-abcde-westus.mongo.cosmos.azure.com: nodename nor servname provided, or not known
    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:211)
    at com.mongodb.connection.netty.NettyStream.openAsync(NettyStream.java:163)
    at com.mongodb.connection.netty.NettyStream.open(NettyStream.java:154)
 at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:180)
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188)
   at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:152)
   at java.lang.Thread.run(Thread.java:750)
Caused by: java.net.UnknownHostException: mongodb-abcde-westus.mongo.cosmos.azure.com: nodename nor servname provided, or not known
   at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
  at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:867)
  at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
 at java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:815)
 at java.net.InetAddress.getAllByName0(InetAddress.java:1291)
   at java.net.InetAddress.getAllByName(InetAddress.java:1144)
    at java.net.InetAddress.getAllByName(InetAddress.java:1065)
    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:203)
    ... 6 common frames omitted

2023-08-15 14:11:14.067  INFO 31216 --- [azure.com:10255] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:139, serverValue:416056366}] to mongodb-abcde-westus.mongo.cosmos.azure.com:10255

解决方案

修改application.properties中的配置,调整正则表达式仅替换异常栈内部的换行符,保留异常内容结尾的换行,确保后续日志能正常换行:

logging.level.exception-conversion-word: "%replace(%wEx){'\n(?!$)','\u2028'}%nopex"

原理说明

原配置替换了异常输出中的所有换行符,包括异常内容结尾的换行,导致日志系统无法在异常日志与下一条日志之间插入分隔换行,进而出现合并问题。调整后的正则\n(?!$)仅匹配非结尾位置的换行,替换为\u2028,同时保留异常末尾的换行,保证后续日志能单独成行显示。

内容的提问来源于stack exchange,提问作者Venu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 00:37:46