在 Ubuntu 上 Tomcat 日志出现乱码,通常不是 Tomcat 本身的问题,而是 字符编码不一致 导致的。下面按常见原因给你系统排查和解决思路。
| 原因 | 说明 |
|---|---|
| 系统/终端编码不是 UTF-8 | Ubuntu 默认 UTF-8,但可能被改过 |
| Tomcat 启动参数未指定 UTF-8 | Java 默认编码可能不是 UTF-8 |
| 日志文件本身是 UTF-8,但查看方式不对 | 用 vim / cat / less 显示异常 |
| Web 应用输出中文但编码不一致 | request/response 编码问题 |
| log4j / logback 配置问题 | 日志框架编码未指定 |
locale
✅ 正常应该是:
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
❌ 如果是:
POSIX
C
GBK
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8
然后 重新登录或重启。
catalina.sh编辑:
vim /opt/tomcat/bin/catalina.sh
在文件开头或 JAVA_OPTS 中加入:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
✅ 推荐写法:
JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
然后重启 Tomcat:
./shutdown.sh
./startup.sh
less catalina.out
如果乱码,尝试:
LANG=en_US.UTF-8 less catalina.out
:set encoding=utf-8
:set fileencoding=utf-8
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
server.xml<Connector
port="8080"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
/>
log4j.appender.file.encoding=UTF-8
<encoder>
<pattern>%d %p %c - %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
echo $LANG
ps -ef | grep tomcat
grep file.encoding catalina.out
Ubuntu 上 Tomcat 日志乱码,90% 是因为 Java 没用 UTF-8 启动,或系统 locale 不是 UTF-8。
如果你愿意,可以把下面信息发我,我可以精确判断是哪一种:
locale 输出catalina.out 还是 log4j/logback 日志