Spring配置Logback向syslog服务器重复发送日志问题
问题根因
ch.qos.logback.classic.net.SyslogAppender 默认存在内置逻辑:会将异常堆栈的每一行拆分为独立的syslog消息单独发送,该逻辑不会因为你在suffixPattern中配置了%ex异常输出规则就自动关闭,因此会产生重复日志:
- 第一条是你自定义格式、携带完整异常栈的日志
- 后续多条是appender自动拆分栈帧、逐行发送的重复日志
你已经给PAPERTRAIL_LOGGER配置了additivity="false",可以排除日志向上传递给根logger绑定的其他appender导致重复的可能。
解决方法
在PAPERTRAIL appender的配置中新增<throwableExcluded>true</throwableExcluded>配置项,显式关闭appender自动拆分、单独发送异常栈的逻辑——你已经在suffixPattern中通过%ex{full}配置了完整异常输出,因此不会丢失任何异常栈信息。
修改后的appender配置如下:
<appender name="PAPERTRAIL" class="ch.qos.logback.classic.net.SyslogAppender"> <syslogHost>[HOST]</syslogHost> <port>[PORT]</port> <facility>user</facility> <!-- 关闭自动拆分发送异常栈的逻辑 --> <throwableExcluded>true</throwableExcluded> <suffixPattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %clr(%5p) KOCH --- %ex{full}</suffixPattern> </appender>
效果验证
配置修改重启应用后,syslog服务端只会收到一条符合你自定义格式、携带完整异常栈的日志,不会再出现逐行拆分的重复异常栈日志。
内容的提问来源于stack exchange,提问作者Mathias Hillmann
相关产品推荐
相关产品推荐

