在 Ubuntu 上 Tomcat 日志乱码,通常不是 Tomcat 本身“坏了”,而是字符编码不一致导致的。下面按常见原因给你讲清楚。
Ubuntu 默认一般是 UTF-8,但有时:
locale
正常应看到:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果不是 UTF-8:
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
并重新登录。
Tomcat 默认不一定用 UTF-8 写日志。
catalina.sh在 bin/catalina.sh 中加入:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
或
CATALINA_OPTS="-Dfile.encoding=UTF-8"
logging.propertiesTomcat 使用 JUL(java.util.logging)
编辑:
conf/logging.properties
确保有:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
如果你用的是 Logback:
<encoder>
<charset>UTF-8</charset>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
</encoder>
如果是 Log4j2:
<PatternLayout charset="UTF-8" pattern="%d %p %c - %m%n"/>
即使 Tomcat 正常,如果:
也会看到“乱码”。
✅ 解决:
有时日志是 Windows 上传的应用打出的 GBK 日志
查看:
file catalina.out
如果是:
ISO-8859 / GBK
用:
iconv -f GBK -t UTF-8 catalina.out
locale 是 UTF-8-Dfile.encoding=UTF-8logging.properties 指定 UTF-8Ubuntu 上 Tomcat 日志乱码,99% 是“系统编码 + Tomcat 编码 + 客户端编码”不一致导致的,不是 Tomcat bug。
如果你愿意,可以把:
locale 输出logging.properties发给我,我可以精准定位是哪一种乱码。