在 Debian 上运行 Tomcat 出现日志乱码,通常是字符编码不一致导致的(系统、Java、Tomcat、终端编码不同)。下面按常见原因一步步解决。
locale
正常应类似:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
如果看到 POSIX / C / 空,就会乱码。
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
setenv.sh路径一般在:
/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
# 或
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh
编辑:
/opt/tomcat/conf/logging.properties
确保有:
java.util.logging.ConsoleHandler.encoding = UTF-8
如有 FileHandler:
java.util.logging.FileHandler.encoding = UTF-8
如果你是用 CRT / PuTTY / Xshell / Terminal 看日志:
例如:
cat /opt/tomcat/logs/catalina.out
终端必须是 UTF-8。
如果你用的是 log4j2 / logback:
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8" pattern="%d %p %c{1.} %m%n"/>
</Console>
</Appenders>
</Configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>%d %p %c %m%n</pattern>
</encoder>
</appender>
locale 是 UTF-8-Dfile.encoding=UTF-8如果你愿意,可以把下面信息发我,我可以精准告诉你改哪里:
我可以直接给你最小修改方案。