为什么CentOS Java日志乱码

2026-07-09编程开发138893

CentOS 上 Java 日志出现乱码,通常不是 Java 本身的问题,而是字符编码不一致导致的。下面按最常见原因 → 排查方法 → 解决方案给你一个完整说明。


一、最常见原因(90% 都在这里)

1️⃣ Linux 系统字符集不是 UTF-8

Java 默认使用系统字符集,如果系统不是 UTF-8,日志就会乱码。

检查:

locale

如果看到类似:

LANG=zh_CN.GBK
LC_ALL=

或者没有 UTF-8,就说明有问题。

✅ 正确应该是:

LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8

2️⃣ Tomcat / Java 启动参数没指定 UTF-8

即使系统是 UTF-8,Java 也可能用错误编码。

检查 Java 默认编码:

java -XshowSettings:properties -version 2>&1 | grep file.encoding

如果看到:

file.encoding=GBK

就会乱码。


3️⃣ 日志框架配置问题(logback / log4j)

日志文件本身编码不对。

例如 logback.xml

<encoder>
    <pattern>%d %p %c - %m%n</pattern>
    
</encoder>

✅ 正确写法:

<encoder>
    <pattern>%d %p %c - %m%n</pattern>
    <charset>UTF-8</charset>
</encoder>

4️⃣ 终端 / SSH 工具编码不一致

如果你是在:

  • Xshell
  • SecureCRT
  • PuTTY

查看日志,而终端编码不是 UTF-8,也会显示乱码(但文件本身是对的)。

✅ 终端编码要设置为 UTF-8


5️⃣ 日志文件本身已经是 GBK

如果日志是用 GBK 写的,你用 UTF-8 方式查看,也会乱码。

检查文件编码:

file xxx.log

二、一步步排查(推荐顺序)

✅ Step 1:确认系统字符集

locale

如果不是 UTF-8:

sudo localectl set-locale LANG=zh_CN.UTF-8

或:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

✅ Step 2:确认 Java 编码

java -XshowSettings:properties -version

如果不是 UTF-8,在启动参数中加:

-Dfile.encoding=UTF-8

例如:

java -Dfile.encoding=UTF-8 -jar app.jar

✅ Step 3:检查日志框架配置

  • logback:加 UTF-8
  • log4j2:
<PatternLayout charset="UTF-8" pattern="%d %p %c - %m%n"/>

✅ Step 4:确认终端编码

  • Xshell:会话属性 → 终端 → 编码 → UTF-8
  • Linux 终端:
echo $LANG

三、CentOS 7/8 常见完整解决方案(推荐)

/etc/profile~/.bashrc 中加入:

export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8

然后:

source /etc/profile

Java 启动参数:

-Dfile.encoding=UTF-8

四、快速判断乱码来源

现象 原因
文件内容乱码 日志编码不对
终端显示乱码 终端编码不对
文件 & 终端都乱 Java / 系统编码不对
只中文乱码 非 UTF-8

五、如果你愿意,我可以帮你精准定位

你可以直接贴出:

  1. locale 输出
  2. java -version
  3. 日志框架(logback / log4j)
  4. 乱码截图或日志片段

我可以直接告诉你该改哪一行

《为什么CentOS Java日志乱码.doc》

下载本文的Word格式文档,以方便收藏与打印。