在 Ubuntu 上 Tomcat 日志出现乱码,通常不是 Tomcat 本身的 bug,而是字符编码不一致导致的。下面按最常见原因 → 解决方式给你梳理。
Ubuntu 默认是 UTF-8,但:
✅ 检查:
locale
正常应类似:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
✅ 如果不是 UTF-8:
sudo apt install locales
sudo dpkg-reconfigure locales
选 en_US.UTF-8 或 zh_CN.UTF-8
Tomcat 默认使用系统编码,如果是非 UTF-8,日志就乱。
✅ 修改 bin/catalina.sh(或 setenv.sh):
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
或:
JAVA_OPTS="-Dfile.encoding=UTF-8"
重启 Tomcat 生效。
Tomcat 使用 JULI 日志。
✅ 修改:
vi conf/logging.properties
确保有:
java.util.logging.ConsoleHandler.encoding = UTF-8
如果是文件日志:
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
即使 Tomcat 正常,应用也可能乱码。
✅ JSP:
<%@ page contentType="text/html;charset=UTF-8" %>
✅ Spring Boot:
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
日志文件本身是 UTF-8,但你用 cat / vim 时终端不是 UTF-8。
✅ 验证文件编码:
file catalina.out
✅ vim 中:
:set encoding=utf-8
| 检查项 | 命令 |
|---|---|
| 系统编码 | locale |
| Tomcat 编码 | `ps -ef |
| 日志编码 | file logs/catalina.out |
| SSH 客户端 | 设置为 UTF-8 |
# catalina.sh / setenv.sh
export JAVA_OPTS="-Dfile.encoding=UTF-8"
# logging.properties
java.util.logging.ConsoleHandler.encoding = UTF-8
如果你愿意,可以:
locale + catalina.out 前几行我可以直接帮你定位是哪一层编码错了。