温馨提示×

Ubuntu Tomcat日志为何乱码

小樊
40
2026-07-10 10:24:07
栏目: 智能运维

Ubuntu 上运行 Tomcat 日志出现乱码,通常不是 Tomcat 本身坏了,而是 字符编码不一致 导致的。下面按最常见原因 → 解决方案给你系统排查一遍。


一、最常见原因汇总(重点看前 3 个)

原因 表现
系统 / 终端编码不是 UTF-8 catalina.out 中文乱码
Tomcat 启动参数未指定 UTF-8 日志、控制台输出乱码
Java 默认编码不是 UTF-8 程序里 System.out.println 乱码
日志框架编码配置错误 logback / log4j 乱码
文件本身编码不对 显示正常但内容已乱

二、先确认系统编码(非常关键)

locale

✅ 正常应该是:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

❌ 如果是:

POSIX
C
zh_CN.GBK

修复方式

临时(当前 shell)

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

永久(推荐)

编辑:

sudo vim /etc/default/locale

写入:

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

然后:

source /etc/default/locale

三、Tomcat 启动参数设置 UTF-8(最常见)

1️⃣ 修改 catalina.sh

编辑:

vim $CATALINA_HOME/bin/catalina.sh

在文件开头或 JAVA_OPTS 中加入:

export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

✅ 这是最关键的一步


四、确认 Java 默认编码

java -XshowSettings:properties -version 2>&1 | grep file.encoding

如果不是 UTF-8:

file.encoding = UTF-8

说明 Tomcat 还没生效,重启 Tomcat。


五、catalina.out 乱码(重点)

catalina.out标准输出 + 标准错误 的合并。

检查方式

file catalina.out

如果看到:

ISO-8859 text

说明编码已经错了。

解决方案

不要直接改 catalina.out ✅ 从 源头解决编码


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

logback.xml 示例(正确)

<encoder>
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
    <charset>UTF-8</charset>
</encoder>

log4j2.xml

<PatternLayout charset="UTF-8" pattern="%d %p %c - %m%n"/>

七、SecureCRT / Xshell /终端乱码

如果你是在 Windows 终端工具 看日志:

✅ 设置终端编码为 UTF-8

工具 设置
Xshell 会话属性 → 终端 → 编码 UTF-8
SecureCRT Session Options → Appearance → UTF-8

八、快速自检清单(照着做)

# 1. 系统编码
locale

# 2. Java 编码
java -XshowSettings:properties -version 2>&1 | grep file.encoding

# 3. Tomcat 启动参数
grep file.encoding $CATALINA_HOME/bin/catalina.sh

# 4. 重启 Tomcat
$CATALINA_HOME/bin/shutdown.sh
$CATALINA_HOME/bin/startup.sh

九、推荐的标准配置(生产环境)

系统 UTF-8Tomcat JAVA_OPTS UTF-8日志框架 UTF-8终端 UTF-8


十、如果你愿意,我可以帮你精确定位

你可以直接贴出来:

  1. locale 输出
  2. catalina.out 乱码截图或文字
  3. 用的是 logback / log4j / log4j2
  4. Ubuntu 版本

我可以 直接告诉你改哪一行就能解决

0