将彩色消息输出到控制台与文件

时间:2019-01-21 07:56:08

标签: spring-boot log4j2

我正在将Spring Boot与log4j2一起使用

要使用Spring Boot的AnsiOutput将彩色/样式化的消息写入控制台附加程序,我们需要在intellij中设置spring.output.ansi.enabled=ALWAYS(我的假设是因为所有IDE都使用javaw启动Java,而Javaw不会直接拥有自己的控制台,因此默认设置spring.output.ansi.enabled=DETECT在IDE中默认不起作用)

但是,如果我们对此进行设置,则Spring Boot应该将相同的ANSI特殊字符也与控制台一起写入其他附加程序(例如File附加程序),因为该属性并不表示我们只需要将颜色格式应用于控制台< / p>

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

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

1 个答案:

答案 0 :(得分:2)

Spring Boot的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{…}{…}实现输出的着色。正如您在上面看到的那样,它在控制台附加程序的模式中使用,但在文件附加程序的模式中不使用。正是这种差异使得仅控制台输出可以着色。