在 CentOS 上 Java 日志出现乱码,通常是字符编码不一致导致的(文件/终端/Java 默认编码不对)。下面按「最常见 → 进阶」给你一套排查和解决思路。
cat / less 看乱)查看当前 Java 编码:
java -XshowSettings:properties -version 2>&1 | grep encoding
如果看到:
file.encoding = ANSI_X3.4-1968
说明不是 UTF-8。
✅ 解决:启动参数强制 UTF-8
java -Dfile.encoding=UTF-8 -jar yourapp.jar
如果是 Tomcat:
# catalina.sh
JAVA_OPTS="-Dfile.encoding=UTF-8"
locale
如果不是 UTF-8,执行:
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
永久生效:
vim /etc/locale.conf
LANG=zh_CN.UTF-8
echo $LANG
必须是 UTF-8
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<PatternLayout charset="UTF-8" pattern="%d %p %c{1.} %m%n"/>
如果日志文件已经乱了:
file -i app.log
iconv -f GBK -t UTF-8 app.log > app_utf8.log
export LANG=zh_CN.UTF-8
java -Dfile.encoding=UTF-8 -jar yourapp.jar
再加日志框架 UTF-8 配置,基本 100% 解决。
如果你愿意,可以把:
发给我,我可以直接帮你写精确配置。