如何在 spring-boot 中为 ANSI 颜色功能配置 logback?

How to configure logback in spring-boot for ANSI color feature?

我有一个在 windows 上运行的 spring-boot 应用程序。我在我的项目中添加了 jansi(v1.8) 依赖项以在 windows 上启用彩色终端输出。

包含了 spring-boot 中提供的 logback 配置,即在 logback.xml 中添加了以下行。

<include resource="org/springframework/boot/logging/logback/base.xml" />

我不清楚在 logback.xml 中配置什么,以便它的日志语句按照 spring-boot 提供的 base.xml 进行着色。抱歉,如果这是一个非常愚蠢的问题,我是 logback 的新手。

谢谢!

Logback 文档的 coloring 部分对此进行了描述:

Grouping by parentheses as explained above allows coloring of sub-patterns. As of version 1.0.5, PatternLayout recognizes "%black", "%red", "%green","%yellow","%blue", "%magenta","%cyan", "%white", "%gray", "%boldRed","%boldGreen", "%boldYellow", "%boldBlue", "%boldMagenta", "%boldCyan", "%boldWhite" and "%highlight" as conversion words. These conversion words are intended to contain a sub-pattern. Any sub-pattern enclosed by a coloring word will be output in the specified colour.

还有一个示例配置文件向您展示了如何使用转换词:

<configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- On Windows machines setting withJansi to true enables ANSI
         color code interpretation by the Jansi library. This requires
         org.fusesource.jansi:jansi:1.8 on the class path.  Note that
         Unix-based operating systems such as Linux and Mac OS X
         support ANSI color codes by default. -->
    <withJansi>true</withJansi>
    <encoder>
      <pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Spring 引导添加了对此的支持:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logging-color-coded-output

刚设置

spring.output.ansi.enabled=always

这是您可以使用的示例配置。

    <?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%-40.40logger{39}.%M){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <!--<property name="CONSOLE_LOG_PATTERN" value="%d %p [%c{1}] - %m%n"/>-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <appender name="ROLLING_APPENDER"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <!--<file>C:/tmp/var/demo/demo-app.log</file>-->
        <!--<file>/var/log/mds/demo-app.log</file>-->
        <file>${LOG_FOLDER}/demo-app.log</file>
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>
                ${LOG_FOLDER}/demo-app.log.%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>
            <!--<fileNamePattern>
                C:/tmp/var/demo-app.log.%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>-->
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>20</maxHistory>
            <totalSizeCap>1000MB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <logger name="com.hsbc.app.demo" additivity="false" level="debug">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ROLLING_APPENDER"/>
    </logger>
    <logger name="org.springframework" level="INFO"/>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ROLLING_APPENDER"/>
    </root>
</configuration>