SpringBoot 日志记录 - 每个日志条目开头的无关连字符

2022-09-03 12:42:39

我正在尝试从我们的控制台和文件日志中删除一个前导连字符,在SpringBoot 1.3.5.RELEASE中使用默认的logback配置。

日志记录模式如下所示:

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %clr([${spring.application.name}]){red} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} %X{req.requestId} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}'

文件日志模式类似,没有颜色编码。两者都在第一行之后输出每一行,并带有前导连字符,这使得我们的系统日志 - logstash - grok过滤更加棘手。输出示例:

2016-06-21 11:52:00.576 [my-app] INFO etc.. (application started)
-2016-06-21 11:52:00.583 [my-app] DEBUG etc..
-2016-06-21 11:52:00.583 [my-app] INFO etc..

我在文档中看不到任何提及此行为的内容。如果可能的话,欢迎任何关于如何消除它的建议!

更新

由于Edgar在下面的回答,事实证明这是由我们日志记录模式结束时的以下原因引起的:

${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}

我用它替换了它:

${LOG_EXCEPTION_CONVERSION_WORD:%rEx}

瞧,下一行开头的连字符消失了。查看 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-custom-log-configuration


答案 1

问题出在以下部分:logging.pattern.console

${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}

:-是 Logback 的默认值分隔符,也是您应该在 logback.xml 中使用的分隔符。但是,您正在配置应该使用的Spring Framework的默认值分隔符()的位置。application.properties:

正如您使用的那样,您说的是使用 的值,如果未设置,请改用。:-LOG_EXCEPTION_CONVERSION_WORD-%rEx

正确的语法是:

${LOG_EXCEPTION_CONVERSION_WORD:%rEx}

答案 2

如果不提供完整的日志记录格式,则很难进行诊断。我在我们的代码中看到了类似的东西,它似乎与在格式中包含以下内容有关:

${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

如果您正在使用它,则连字符可能是 %w 之前的连字符。我不确定这样做的预期目的是什么。如果我找到它,我会把它添加到我的答案中。


推荐