在 Debian 上运行 Tomcat 时,日志中文乱码 / 编码异常是非常常见的问题,通常不是 Tomcat 本身坏了,而是JVM 默认编码、系统 locale、日志组件编码不一致导致的。
下面按「现象 → 原因 → 解决方案」给你一个完整排查和处理指南。
catalina.out 中文乱码localhost.log / manager.log 乱码??? 或 䏿–‡Tomcat 日志编码由以下因素决定:
⚠️ Debian 默认很多环境是
LANG=C或POSIX,JVM 会默认使用ANSI_X3.4-1968 (ASCII),导致乱码。
locale
echo $LANG
java -XshowSettings:properties -version 2>&1 | grep encoding
常见问题输出:
LANG=C
file.encoding = ANSI_X3.4-1968
✅ 正常应为:
LANG=zh_CN.UTF-8
file.encoding = UTF-8
setenv.shsudo nano /opt/tomcat/bin/setenv.sh
加入:
export CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8"
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
重启 Tomcat:
systemctl restart tomcat
sudo dpkg-reconfigure locales
勾选:
zh_CN.UTF-8
en_US.UTF-8
设置默认:
sudo update-locale LANG=zh_CN.UTF-8
重启服务器或重新登录。
nano /opt/tomcat/conf/logging.properties
确保:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
如果你是用:
./startup.sh > catalina.out
请改为:
./catalina.sh run 2>&1 | iconv -f UTF-8 -t UTF-8
或确保终端是 UTF-8。
tail -n 50 /opt/tomcat/logs/catalina.out
应有正常中文,无乱码。
额外需要:
<encoder>
<charset>UTF-8</charset>
</encoder>
Debian + Tomcat 日志乱码 = 系统 locale 不是 UTF-8 + JVM 没指定编码
如果你愿意,可以贴一下:
locale 输出我可以帮你精确给出配置。