温馨提示×

centos java日志编码乱码咋办

小樊
48
2026-10-08 23:55:58
栏目: 编程语言

在 CentOS 上 Java 日志出现乱码,通常是字符编码不一致导致的(文件/终端/Java 默认编码不对)。下面按「最常见 → 进阶」给你一套排查和解决思路。


一、先确认乱码本质

  1. 日志文件乱码(用 cat / less 看乱)
  2. 终端显示乱码(文件正常,但 SSH 客户端乱)
  3. 日志框架输出乱码(log4j / logback 写出来的就是乱的)

二、最常见原因 & 解决办法

1️⃣ Java 默认编码不是 UTF-8(90% 的原因)

查看当前 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"

2️⃣ 系统 Locale 不是 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

3️⃣ SSH 客户端编码不对(Windows 常见)

  • Xshell / SecureCRT / PuTTY
    • 编码设置为 UTF-8
  • Linux 本地终端:
echo $LANG

必须是 UTF-8


三、日志框架层面解决(强烈推荐)

✅ Logback(最推荐)

<encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
    <charset>UTF-8</charset>
</encoder>

✅ Log4j2

<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% 解决。


如果你愿意,可以把:

  • Java 版本
  • 日志框架(log4j / logback)
  • 乱码截图或示例

发给我,我可以直接帮你写精确配置。

0 踩