Tomcat日志乱码问题的常见原因及解决方法
Tomcat日志乱码的本质是字符编码不一致,主要涉及Tomcat自身配置、应用程序编码、操作系统环境及终端显示等多个环节。以下是系统化的解决步骤:
Tomcat默认使用java.util.logging框架记录日志,需确保其输出编码与应用程序一致。
conf/logging.properties文件;java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
若日志中包含URL参数(如?name=张三)乱码,需调整Tomcat对URI的编码解析。
conf/server.xml文件,找到<Connector>标签(对应8080等端口);URIEncoding属性为UTF-8,示例如下:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
Tomcat启动时的JVM默认编码(file.encoding)若与日志编码不一致,会导致日志乱码。需修改启动脚本:
bin/catalina.sh,在文件开头添加:export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
bin/catalina.bat,在文件开头添加:set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
操作系统默认编码若与Tomcat配置冲突,会导致日志乱码:
echo $LANG查看当前编码(如zh_CN.UTF-8为正确值);若不是UTF-8,可通过以下命令临时修改(重启后失效):export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
或永久修改/etc/profile文件,添加上述两行并执行source /etc/profile。若通过IDE运行Tomcat,需确保IDE控制台能正确显示UTF-8编码的日志:
File→Settings→Editor→File Encodings,将“Global Encoding”“Project Encoding”“Default encoding for properties files”均设置为UTF-8;Window→Preferences→General→Workspace,将“Text file encoding”设置为UTF-8。若应用程序自身记录的日志乱码,需调整其日志配置:
log4j.properties中添加:log4j.appender.console.encoding=UTF-8
log4j.appender.file.encoding=UTF-8
logback.xml中添加:<encoder>
<charset>UTF-8</charset>
</encoder>
logger.info(new String("测试日志".getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8));
若通过终端(如Windows CMD、PuTTY)查看日志,需确保终端编码与Tomcat日志编码一致:
chcp 65001切换代码页为UTF-8;xterm-256color,“Character set”设置为UTF-8。.bashrc)或属性设置,确保编码统一。getBytes("ISO-8859-1")),或第三方库(如数据库驱动)的编码设置;