在 Tomcat 中,日志编码主要涉及 Tomcat 自带日志(JULI)、应用日志(如 Log4j / Logback) 以及 控制台编码。下面按常见场景说明如何设置。
Tomcat 使用 java.util.logging(JULI),配置文件在:
$TOMCAT_HOME/conf/logging.properties
UTF-8)在 logging.properties 中增加或修改:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
示例:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.level = FINE
✅ 这是解决 Tomcat 日志中文乱码最关键的一步
确保:
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
或在 catalina.sh 中:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
Windows 控制台默认是 GBK,需要显式指定:
bin/catalina.bat 或 setenv.bat:
set JAVA_OPTS=-Dfile.encoding=UTF-8
⚠️ 注意:
Windows 控制台 UTF-8 支持不完整,有时仍会乱码,这是系统限制。
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"/>
log4j.appender.file.encoding=UTF-8
在 bin/setenv.sh(Linux)或 setenv.bat(Windows)中:
JAVA_OPTS="-Dfile.encoding=UTF-8"
⚠️ 不推荐作为唯一方案,但常作为辅助手段。
logging.properties 中编码-Dfile.encoding=UTF-8| 场景 | 设置方式 |
|---|---|
| Tomcat 日志 | logging.properties → encoding=UTF-8 |
| catalina.out | JAVA_OPTS=-Dfile.encoding=UTF-8 |
| Logback | <charset>UTF-8</charset> |
| Log4j2 | charset="UTF-8" |
| Windows 乱码 | 系统限制,尽量用 UTF-8 + 文件日志 |
如果你愿意,可以告诉我:
我可以给你一份完全对应你环境的配置示例。