Debian 上 Tomcat 日志出现乱码,通常是 字符编码不一致 造成的,常见原因和解决办法如下(按出现频率排序):
locale
如果看到:
LANG=en_US
LC_ALL=
或不是 UTF-8,就可能导致乱码。
✅ 解决:设置为 UTF‑8
sudo dpkg-reconfigure locales
勾选:
en_US.UTF-8
zh_CN.UTF-8
然后执行:
sudo update-locale LANG=en_US.UTF-8
重启服务器或重新登录。
编辑 Tomcat 启动参数:
setenv.sh(推荐)sudo nano /opt/tomcat/bin/setenv.sh
添加:
export CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8"
如果没有该文件,新建即可。
catalina.sh(不推荐,升级会覆盖)
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
重启 Tomcat:
sudo systemctl restart tomcat
less 查看日志less /opt/tomcat/logs/catalina.out
如果乱码:
export LESSCHARSET=utf-8
less catalina.out
或:
iconv -f GBK -t UTF-8 catalina.out
logging.propertiessudo nano /opt/tomcat/conf/logging.properties
确保包含:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
<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 nano /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
echo $LANG
java -XshowSettings:properties -version 2>&1 | grep file.encoding
ps aux | grep tomcat
✅ 90% 情况只需做这两步:
UTF-8-Dfile.encoding=UTF-8
如果你愿意,可以把下面信息发我,我可以精确判断是哪一种乱码:
catalina.out 还是应用日志