Spring boot AnsiOutput颜色消息到控制台vs文件
我正在使用带有log4j2的Spring boot 要使用Spring boot的AnsiOutput将彩色/样式化消息写入控制台appender,我们需要在intellij中设置Spring boot AnsiOutput颜色消息到控制台vs文件,spring-boot,log4j2,Spring Boot,Log4j2,我正在使用带有log4j2的Spring boot 要使用Spring boot的AnsiOutput将彩色/样式化消息写入控制台appender,我们需要在intellij中设置Spring.output.ansi.enabled=ALWAYS(我的假设是,所有IDE都使用javaw启动java,而javaw不会直接拥有自己的控制台,因此默认设置spring.output.ansi.enabled=DETECT在IDE中默认不起作用) 但是如果我们设置了这个参数,spring boot也应该将
Spring.output.ansi.enabled=ALWAYS
(我的假设是,所有IDE都使用javaw启动java,而javaw不会直接拥有自己的控制台,因此默认设置spring.output.ansi.enabled=DETECT
在IDE中默认不起作用)
但是如果我们设置了这个参数,spring boot也应该将相同的ANSI特殊字符与console一起写入其他appender(比如File
appender),因为属性并没有说我们只需要将颜色格式应用于console
但是,当我查看日志文件时,在日志消息中没有看到任何特殊字符
有人能解释一下log4j2/spring boot是如何做到这一点的吗?spring boot的log4j2默认配置对控制台appender和文件appender使用不同的模式。控制台appender的模式如下:
%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{%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{…}{…}实现的
。正如您在上面所看到的,它用于控制台追加器的模式,但不用于文件追加器的模式。正是这种差异,才允许对控制台输出进行着色。Spring Boot的Log4j2默认配置对控制台追加器和文件追加器使用不同的模式e控制台附加程序如下所示:
%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{%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{…}{…}实现的
。正如您在上面看到的,它用于控制台appender的模式,但不用于文件appender的模式。正是这种差异使得控制台输出只能着色。Oops。看起来我太笨了/在发布问题之前没有足够注意细节。无论如何,谢谢Oops。看起来我是在我发布问题之前,我太笨了/我没有足够注意细节。无论如何,谢谢