You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot容器应用Logback颜色编码在Grafana Loki失效问题

问题根源

你配置的logback日志格式中使用了%highlight、%cyan这类带ANSI颜色编码的修饰符,这类编码是为终端控制台渲染颜色设计的,当日志被采集到Fluentd、Loki这类非终端的日志存储系统时,默认不会解析这类转义字符,就会直接显示为乱码,也无法正常渲染颜色。

可选解决方案

方案1:移除日志格式中的颜色修饰符(最通用)

直接修改logback.xml的日志pattern,删除所有颜色相关的修饰符,修改后的配置参考:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_PATH" value="logs" />
    <appender name="STDOUT"
        class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %-5level
                %logger{36} - %msg %n
            </pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

修改后输出的日志不会携带ANSI转义字符,采集到Loki后自然不会出现乱码。

方案2:动态适配颜色输出场景

如果需要保留本地开发时的终端颜色显示,线上部署自动关闭颜色输出,可以通过配置开关实现:
在logback的ConsoleAppender中添加withJansi参数,通过环境变量动态控制开关:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 本地开发时设置为true开启颜色,线上默认false关闭 -->
    <withJansi>${LOG_COLOR_ENABLE:false}</withJansi>
    <encoder>
        <pattern>
            %d{dd-MM-yyyy HH:mm:ss.SSS} [%thread] %highlight(%-5level)
            %cyan(%logger{36}) - %msg %n
        </pattern>
    </encoder>
</appender>

本地启动应用时添加JVM参数-DLOG_COLOR_ENABLE=true即可保留颜色输出,容器部署时不需要额外配置,默认关闭颜色输出避免乱码。

方案3:Fluentd采集层过滤转义字符

如果不想修改应用配置,可以在Fluentd采集环节添加过滤规则,删除日志中的ANSI转义字符,参考配置:

<filter **>
  @type record_transformer
  enable_ruby true
  <record>
    message ${record["message"].gsub(/\e\[[0-9;]*m/, '')}
  </record>
</filter>

配置后Fluentd转发到Loki的日志已经清除了所有颜色转义符,不会出现乱码。

方案4:Grafana侧开启ANSI解析(保留颜色显示)

如果不想修改任何采集、应用配置,同时希望在Grafana中正常显示日志颜色,可以在Grafana的日志面板中开启ANSI escape code parsing开关,开启后Grafana会自动解析日志中的ANSI转义符渲染颜色,不会显示乱码。

内容的提问来源于stack exchange,提问作者TheAkashKamble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:15:04