CentOS 上 Java 日志出现乱码,通常不是 Java 本身的问题,而是字符编码不一致导致的。下面按最常见原因 → 排查方法 → 解决方案给你一个完整说明。
CentOS 默认有时是:
LANG=en_US
或
LANG=C
这会导致:
????? 或 ç✅ 检查系统编码
locale
如果看到:
LANG=C
或没有 UTF-8,就是问题根源。
即使系统是 UTF-8,Java 也可能用错误编码。
✅ 检查 Java 默认编码
java -XshowSettings:properties -version 2>&1 | grep file.encoding
如果不是:
file.encoding = UTF-8
就会乱码。
<encoder>
<pattern>%d %msg%n</pattern>
</encoder>
❌ 没指定 charset,默认可能用系统编码
✅ 正确写法:
<encoder>
<pattern>%d %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
即使日志是对的,你看到的是乱码。
常见情况:
✅ 确保终端编码:
例如:
✅ 用 vim 查看:
:set fileencoding
locale
✅ 建议结果:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
java -XshowSettings:properties -version
重点看:
file.encoding = UTF-8
file app.log
✅ 正确:
app.log: UTF-8 Unicode text
vim /etc/locale.conf
改成:
LANG=en_US.UTF-8
然后:
source /etc/locale.conf
java \
-Dfile.encoding=UTF-8 \
-Dsun.jnu.encoding=UTF-8 \
-jar app.jar
✅ 这是生产环境标准做法
<PatternLayout charset="UTF-8" pattern="%d %msg%n"/>
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
env:
- name: LANG
value: en_US.UTF-8
- name: LC_ALL
value: en_US.UTF-8
CentOS Java 日志乱码 = 编码不一致
✅ 系统 UTF-8
✅ Java-Dfile.encoding=UTF-8
✅ 日志框架显式 UTF-8
✅ 终端 UTF-8
如果你愿意,可以把下面信息发我,我可以精准定位是哪一层的问题:
locale 输出