AnsiOutput 颜色消息到控制台与文件

AnsiOutput color messages to Console vs File

我正在使用 Spring 引导和 log4j2

要使用 Spring 引导的 AnsiOutput 将 colored/styled 消息写入控制台附加程序,我们需要在 intellij 中设置 spring.output.ansi.enabled=ALWAYS(我的假设是因为所有 IDE 启动 java 使用javaw 不会直接有自己的控制台,所以默认设置 spring.output.ansi.enabled=DETECT 在 IDE 中默认不起作用)

但是如果我们设置这个,spring boot 应该将相同的 ANSI 特殊字符写入其他附加程序(比如 File 附加程序)以及控制台,因为 属性 没有说我们只需要将颜色格式应用到控制台

但是,当我查看日志文件时,我没有在日志消息中看到任何特殊字符

有人可以解释一下 log4j2/spring boot 是如何做到这一点的吗?

Spring Log4j2 的引导默认配置对控制台附加程序和文件附加程序使用不同的模式。控制台附加程序的模式如下:

%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}

文件附加程序的模式如下:

%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}

输出的着色是使用%clr{…}{…}实现的。正如您在上面看到的,它用于控制台附加程序的模式,但没有用于文件附加程序的模式。正是这种差异只允许对控制台输出进行着色。