Ubuntu 下 Tomcat 日志乱码,通常是 字符编码不一致 导致的,重点检查 系统编码、Tomcat 编码、日志框架编码。下面按「最常见 → 少见」给你一套排查与解决方案。
locale
正常应看到:
LANG=en_US.UTF-8
# 或
LANG=zh_CN.UTF-8
如果看到:
LANG=C
或没有 UTF-8,大概率会乱码。
编辑:
sudo vim /etc/default/locale
写入(示例):
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
然后执行:
sudo locale-gen en_US.UTF-8
source /etc/default/locale
重启服务器或 Tomcat。
catalina.sh编辑:
vim /opt/tomcat/bin/catalina.sh
在文件开头或 JAVA_OPTS 中加入:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
✅ 这是解决 Tomcat 日志乱码的核心设置
编辑:
vim /opt/tomcat/conf/logging.properties
确保:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
如果你的 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"/>
如果你是用 systemd 启动 Tomcat:
sudo vim /etc/systemd/system/tomcat.service
在 [Service] 下加:
Environment=LANG=en_US.UTF-8
Environment=LC_ALL=en_US.UTF-8
然后:
sudo systemctl daemon-reload
sudo systemctl restart tomcat
如果你是在 Windows + SSH 看日志乱码:
✅ 解决方法:
export LANG=en_US.UTF-8
| 检查项 | 是否 UTF-8 |
|---|---|
locale |
✅ |
catalina.sh |
✅ |
logging.properties |
✅ |
| logback/log4j | ✅ |
| 终端 | ✅ |
90% 的情况,执行下面两步就够了:
# 1. 系统编码
sudo apt install locales -y
sudo locale-gen en_US.UTF-8
# 2. Tomcat JVM 编码
export JAVA_OPTS="-Dfile.encoding=UTF-8"
如果你愿意,可以把下面信息发我,我可以精准定位到哪一步出问题:
catalina.out 还是 logback 日志我可以一步一步帮你对 ✅