【问题标题】:AnsiOutput color messages to Console vs FileAnsiOutput 颜色消息到控制台与文件
【发布时间】:2019-01-21 19:18:43
【问题描述】:

我正在使用带有 log4j2 的 Spring Boot

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

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

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

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

【问题讨论】:

    标签: spring-boot log4j2


    【解决方案1】:

    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{…}{…} 实现的。正如您在上面看到的,它用于控制台附加程序的模式中,但未用于文件附加程序的模式中。正是这种差异只允许对控制台输出进行着色。

    【讨论】:

    • 糟糕。看起来我太笨了/在我发布问题之前对细节给予了足够的关注。无论如何谢谢
    猜你喜欢
    • 2014-01-03
    • 1970-01-01
    • 2011-03-19
    • 2011-03-31
    • 2014-04-29
    • 2016-03-04
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多