Spring Boot 日志覆盖颜色配置

4
我希望使用不同的颜色来区分 Spring Ansi 彩色日志中的 INFO、DEBUG 和 TRACE,因为它们当前都设置为绿色(请参见下面的表格)。
从这里的文档中https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-logging-color-coded-output 引用如下:
通过使用 %clr 转换词来配置颜色编码。在其最简单的形式中,该转换器根据日志级别对输出进行颜色标记,如下例所示: %clr(%5p) 以下表格描述了日志级别与颜色之间的映射:
级别 | 颜色 --- | --- FATAL | 红色 ERROR | 红色 WARN | 黄色 INFO | 绿色 DEBUG | 绿色 TRACE | 绿色
看起来我需要覆盖 %clr 转换词,但我在文档中找不到任何相关内容。
如果有所不同,我正在使用 log4j2,并希望将其构建到应用程序中。
3个回答

3
我看不到任何传统/记录的方法来在级别范围内覆盖颜色。例如:log4j2中的ColorConverter不喜欢打开那种选项。
您可以尝试定义您自己的Log42颜色插件实现,这是一个使用log4j2 Plugin注释进行注释的插件实现:
@Plugin(name = "color", category = PatternConverter.CATEGORY)

但是不确定它是否有效或可靠,因为Spring已经为此定义了一个。
顺便说一下,如果足够的话,您可以从Spring Boot源代码中定义的CONSOLE_LOG_PATTERN开始定义模式。在log4j2中。记录一下,这里是logback的ColorConverter源代码
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${sys:LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${sys:LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>

不确定为什么log4j2的ColorConverter是final的,而logback的则不是,但我已经按照Spring自己的方式创建了一个新的实现,它运行得非常好。谢谢。 - muttonUp
这很不错,但不确定随着时间的推移可靠性如何。我认为(可能是错误的),您有大约50%的机会使其工作(因为Spring可以选择任何声明颜色插件的log4j2插件:@ Plugin(name =“color”,category = PatternConverter.CATEGORY)。这是您和他们的。 您是否添加了任何内容以强制使用您的插件而不是他们的? - davidxxx
是的,我添加了一个名为sclr的新插件实现,并调整了CONSOLE_LOG_PATTERN以使用它。我本来更喜欢以某种方式重用现有类,但由于大多数内容都是私有的或不适合扩展,因此没有太多可以重用的东西。 - muttonUp

2
首先,%clr是logback的转换规则,也是具有颜色逻辑的规则。这个转换规则在spring类DefaultLogbackConfiguration中定义。
在那里,我们可以看到spring添加了ColorConverter和clr conversionWord到logback配置器中。
通过这次探索,我的结论是你需要创建自己的logback.xml文件(根据文档,它禁用了spring的默认配置)。有了这个文件,你就可以像这样添加自己的转换规则:
<conversionRule conversionWord="nanos" 
              converterClass="chapters.layouts.MySampleConverter" />

之后,您应该使用上面创建的转换词替换 %clr,修改 logging.pattern.console 属性。


1

您可以使用GrepConsole插件(Idea)进行此操作。 更多信息请参见此处


谢谢,这是一个好答案,但我正在寻找在CLI级别下能够工作的东西。即 java -jar xxxx.jar - muttonUp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接