在 Debian 上运行 Tomcat 出现日志乱码,通常不是 Tomcat 本身的 bug,而是字符编码不一致导致的。下面按「最常见 → 较少见」给你系统说明原因和解决办法。
Debian 默认有时是:
LANG=C
LC_ALL=C
这会导致 Tomcat 使用 ASCII 而不是 UTF-8。
locale
如果看到:
LANG=C
LC_ALL=C
那就是问题根源。
sudo apt install locales
sudo dpkg-reconfigure locales
勾选:
en_US.UTF-8
或
zh_CN.UTF-8
然后:
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
重启 Tomcat
systemctl restart tomcat9
编辑:
/etc/default/tomcat9
# 或
/opt/tomcat/bin/setenv.sh
加入:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
或:
CATALINA_OPTS="-Dfile.encoding=UTF-8"
application.yml:
logging:
charset:
console: UTF-8
file: UTF-8
<Configuration>
<Properties>
<Property name="encode">UTF-8</Property>
</Properties>
</Configuration>
即使服务器没问题,你的终端也可能乱码。
Linux 本地终端:
echo $LANG
应为:
zh_CN.UTF-8 或 en_US.UTF-8
例如:
cat catalina.out
正常,但:
less catalina.out
乱码 → less 没识别编码
解决:
export LESSCHARSET=utf-8
locale
echo $LANG
ps -ef | grep tomcat
# 看是否有 -Dfile.encoding=UTF-8
你可以贴出:
locale 输出我可以直接告诉你改哪一行就能解决。