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

标签 java logging spring-boot logback

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

记录模式如下:

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}'

文件日志模式类似,没有颜色编码。两者都在第一行之后输出每一行,并带有前导连字符,这使得我们的 syslog - 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..

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

更新

感谢埃德加在下面的回答,事实证明这是由我们日志模式末尾的以下内容引起的:

${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

最佳答案

问题出在 logging.pattern.console 的这一部分:

${LOG_EXCEPTION_CONVERSION_WORD:-%rEx}

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

正如您使用的 :-,您是说使用 LOG_EXCEPTION_CONVERSION_WORD 的值,如果未设置,则使用 -%rEx 代替。

正确的语法是:

${LOG_EXCEPTION_CONVERSION_WORD:%rEx}

关于java - Spring Boot 日志记录 - 每个日志条目开头的无关连字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37942604/

相关文章:

java - 如何让复杂的条件看起来好看并节省语句的数量?

grails - 更改Grails服务类的日志类别

logging - 从 TimeBasedRollingPolicy 移动到 SizeAndTimeBasedRollingPolicy 以在每个 mignight 或最大大小翻转

python - 避免在调用 Django 管理命令时触及空日志文件

java - Spring Boot应用程序属性暂存和生产

java - 目标不是 JDK 根。找不到 Java 可执行文件 jdk 13.0.2 eclipse 2019

java - 将任意大小的 byte[] 转换为 BigInteger[],然后安全地转换回完全相同的 byte[],有什么线索吗?

java - 是否有任何数据库/或网络服务或链接,我们可以在其中搜索 GS1 - 128 代码并查找来自不同商店的产品信息?

java - Spring websockets - 分离 MessageMapping 和 SendTo

spring-boot - Spring Boot锁定代码获取唯一id