在 Ubuntu 上运行 Tomcat 日志出现乱码,通常不是 Tomcat 本身坏了,而是 字符编码不一致 导致的。下面按最常见原因 → 解决方案给你系统排查一遍。
| 原因 | 表现 |
|---|---|
| 系统 / 终端编码不是 UTF-8 | catalina.out 中文乱码 |
| Tomcat 启动参数未指定 UTF-8 | 日志、控制台输出乱码 |
| Java 默认编码不是 UTF-8 | 程序里 System.out.println 乱码 |
| 日志框架编码配置错误 | logback / log4j 乱码 |
| 文件本身编码不对 | 显示正常但内容已乱 |
locale
✅ 正常应该是:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
❌ 如果是:
POSIX
C
zh_CN.GBK
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
编辑:
sudo vim /etc/default/locale
写入:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
然后:
source /etc/default/locale
catalina.sh编辑:
vim $CATALINA_HOME/bin/catalina.sh
在文件开头或 JAVA_OPTS 中加入:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
✅ 这是最关键的一步
java -XshowSettings:properties -version 2>&1 | grep file.encoding
如果不是 UTF-8:
file.encoding = UTF-8
说明 Tomcat 还没生效,重启 Tomcat。
catalina.out 是 标准输出 + 标准错误 的合并。
file catalina.out
如果看到:
ISO-8859 text
说明编码已经错了。
✅ 不要直接改 catalina.out ✅ 从 源头解决编码
<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 - %m%n"/>
如果你是在 Windows 终端工具 看日志:
✅ 设置终端编码为 UTF-8
| 工具 | 设置 |
|---|---|
| Xshell | 会话属性 → 终端 → 编码 UTF-8 |
| SecureCRT | Session Options → Appearance → UTF-8 |
# 1. 系统编码
locale
# 2. Java 编码
java -XshowSettings:properties -version 2>&1 | grep file.encoding
# 3. Tomcat 启动参数
grep file.encoding $CATALINA_HOME/bin/catalina.sh
# 4. 重启 Tomcat
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh
✅ 系统 UTF-8 ✅ Tomcat JAVA_OPTS UTF-8 ✅ 日志框架 UTF-8 ✅ 终端 UTF-8
你可以直接贴出来:
locale 输出catalina.out 乱码截图或文字我可以 直接告诉你改哪一行就能解决 ✅