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

使用Logback与SpringBoot输出日志时ANSI颜色码乱码问题求助

解决Logback日志文件中ANSI颜色码乱码问题

核心原因

你看到的[39m这类字符是ANSI终端转义序列,用来控制控制台输出颜色,但这些序列会被直接写入日志文件,普通文本编辑器(如记事本、Notepad++默认模式)无法解析,所以显示为乱码。修改文件编码没用,因为这不是编码问题,是日志格式本身包含了终端专用的控制字符。

解决方法

1. 分离控制台与文件日志格式

在Logback配置中,分别为控制台输出和文件输出设置不同的格式:

  • 控制台保留颜色格式,用于终端查看
  • 文件输出去掉所有颜色相关的占位符(如%red、%blue、%highlight等),只输出纯文本内容

示例Spring Boot application.yaml配置:

logging:
  pattern:
    console: "%red(%date) %blue(%logger) [%highlight(%-5level)] [%yellow(%method)] [%green(%thread)]%cyan(: %msg%n%throwable)"
    file: "%date %logger [%level] [%method] [%thread]: %msg%n%throwable"
  charset:
    console: UTF-8
    file: UTF-8

若使用Logback XML配置,可对应设置两个Appender:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%red(%date) %blue(%logger) [%highlight(%-5level)] [%yellow(%method)] [%green(%thread)]%cyan(: %msg%n%throwable)</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <encoder>
        <pattern>%date %logger [%level] [%method] [%thread]: %msg%n%throwable</pattern>
        <charset>UTF-8</charset>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

2. 让编辑器支持解析ANSI转义码(临时查看)

如果不想修改日志配置,只是需要查看现有带颜色码的日志文件:

  • Notepad++:安装ANSI Escape Sequence插件,安装后可自动解析颜色码,显示带颜色的日志内容
  • 专用日志工具:比如本地的Logviewer、Tailwind,这类工具原生支持解析ANSI颜色码,同时提供日志过滤、搜索功能

3. 全局禁用ANSI输出

如果不需要任何终端颜色输出,可在application.yaml中添加:

spring:
  output:
    ansi:
      enabled: never

这样Logback会直接输出纯文本,控制台和文件都不会有颜色码,但控制台日志也会失去颜色高亮。

总结

  • 修改文件编码无法解决问题,因为这不是UTF-8编码错误,是日志包含终端控制字符
  • 最优方案是分离控制台和文件的日志格式,兼顾终端的颜色可读性和文件的纯净性
  • 临时查看现有日志可使用支持ANSI的编辑器或专用日志工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:10:56