Spring 引导日志覆盖颜色

Spring Boot Logging override Colours

我希望在 Spring Ansi 彩色日志中使用不同的颜色来区分 INFO、DEBUG 和 TRACE,因为它们目前都设置为绿色(参见下面的 table)

来自此处的文档 https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-logging-color-coded-output

Color coding is configured by using the %clr conversion word. In its simplest form, the converter colors the output according to the log level, as shown in the following example:

%clr(%5p) The following table describes the mapping of log levels to colors:

Level Color
FATAL Red
ERROR Red
WARN Yellow
INFO Green
DEBUG Green
TRACE Green

看来我需要覆盖 %clr 转换词,但我在文档中找不到任何相关内容。

如果它有所不同,我正在使用 log4j2,并希望将其构建到应用程序中。

可以使用GrepConsole插件(Idea)。 查看更多 here

我没有看到任何 conventional/documented 方法来覆盖级别范围内的颜色。例如:ColorConverter for log4j2 不喜欢为那种选项打开。
您可以尝试定义您的 Log42 颜色插件实现,这是一个使用 log4j2 Plugin 注释进行注释的插件实现:

@Plugin(name = "color", category = PatternConverter.CATEGORY)

但不确定它是否有效或可靠地工作,因为 Spring 已经为此定义了一个。
这里记录的是 ColorConverter source code for logback.

顺便说一句,如果足够的话,你可以从CONSOLE_LOG_PATTERN定义的in the Spring Boot source code for log4j2:

开始定义一个模式
<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>

首先定义的%clr是logback转换规则,是带颜色逻辑的。 此转换规则定义在 spring class DefaultLogbackConfiguration.

我们可以看到 spring 在 logback 配置器中添加了 ColorConverter 和 clr conversionWord。

从这次探索中,我的结论是您必须创建自己的 logback.xml 文件(根据文档,它禁用 spring 默认配置)。有了这个文件,您可以像这样添加自己的转换规则:

<conversionRule conversionWord="nanos" 
              converterClass="chapters.layouts.MySampleConverter" />

之后您应该使用上面创建的 conversionWord 来更改 属性 logging.pattern.console,而不是 %clr。