温馨提示×

centos java日志乱码怎么办

小樊
46
2026-09-06 06:05:38
栏目: 编程语言

在 CentOS 上 Java 日志出现乱码,通常是字符编码不一致导致的。下面按常见原因和解决办法逐步说明。


一、先确认乱码场景

  1. 日志文件里乱码(用 cat / less 看是乱码)
  2. 终端里看日志乱码(SSH 客户端显示乱码)
  3. Java 程序输出到控制台乱码

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

1️⃣ Java 默认编码不是 UTF-8(最常见)

Java 默认编码可能使用了 ANSI_X3.4-1968GBK

查看当前编码

echo $LANG
locale

解决:强制 Java 使用 UTF-8

启动脚本 / java 命令 中加参数:

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

如果是 Tomcat

# catalina.sh
JAVA_OPTS="-Dfile.encoding=UTF-8"

2️⃣ CentOS 系统语言环境不是 UTF-8

查看

locale

如果不是 UTF-8,例如:

LANG=zh_CN.GBK

修改为 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 客户端编码不对(终端乱码)

如果你是用 Xshell / SecureCRT / PuTTY

  • 设置为 UTF-8
  • 不要选 GBK

✅ Xshell 示例:

属性 → 终端 → 编码 → UTF-8

4️⃣ 日志框架编码配置问题(Logback / Log4j)

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"/>

5️⃣ 日志文件本身是 GBK,但用 UTF-8 看

如果是历史日志文件

file app.log

如果是 GBK:

iconv -f GBK -t UTF-8 app.log > app_utf8.log

三、快速自检清单 ✅

  • [ ] echo $LANG 是 UTF-8
  • [ ] Java 启动参数有 -Dfile.encoding=UTF-8
  • [ ] SSH 客户端编码是 UTF-8
  • [ ] 日志框架配置了 UTF-8
  • [ ] 日志文件不是 GBK

四、如果你愿意

你可以贴:

  • Java 启动命令
  • 日志框架(Logback / Log4j / 原生)
  • locale 输出
  • 乱码截图或示例

我可以精确帮你定位是哪一层出的问题

0