温馨提示×

Tomcat日志Ubuntu为何乱码

小樊
36
2026-08-05 14:30:55
栏目: 智能运维

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

然后 重新登录或重启


三、Tomcat 启动参数强制 UTF-8(关键)

1️⃣ 修改 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

四、查看日志时避免“假乱码”

1️⃣ 用 UTF-8 方式查看

less catalina.out

如果乱码,尝试:

LANG=en_US.UTF-8 less catalina.out

2️⃣ vim 中乱码

:set encoding=utf-8
:set fileencoding=utf-8

五、Web 应用中文乱码(常见)

1️⃣ 确保请求和响应编码一致

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

2️⃣ Tomcat server.xml

<Connector
    port="8080"
    URIEncoding="UTF-8"
    useBodyEncodingForURI="true"
/>

六、日志框架编码(log4j / logback)

log4j.properties

log4j.appender.file.encoding=UTF-8

logback.xml

<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 输出
  • 乱码截图或示例
  • Tomcat 版本
  • 日志是 catalina.out 还是 log4j/logback 日志

0