Tomcat日志中文乱码是一个常见问题,通常是由字符编码不一致引起的。以下是常见原因和解决方案:
catalina.out或控制台中文显示为???或乱码字符localhost_access_log中的中文参数乱码System.out.println()输出的中文乱码Linux/Unix系统 (catalina.sh):
# 在文件开头添加或修改
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
# 或
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
Windows系统 (catalina.bat):
# 在setlocal后添加
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8"
在setenv.sh或setenv.bat中添加:
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
fileEncoding="UTF-8" /> <!-- 添加这一行 -->
在conf/logging.properties中:
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.FileHandler.encoding = UTF-8
在~/.bashrc或/etc/profile中添加:
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
在Spring Boot项目中,application.properties:
server.tomcat.uri-encoding=UTF-8
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
# 修改注册表或使用chcp命令
chcp 65001 # 设置控制台为UTF-8
# 或修改注册表:
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
# 值为 "chcp 65001 > nul"
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
检查当前编码:
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
检查日志配置:
file -i或Notepad++查看)统一编码策略:
-Dfile.encoding=UTF-8characterEncoding=utf8创建测试JSP文件test-encoding.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.nio.charset.Charset" %>
<%
out.println("JVM file.encoding: " + System.getProperty("file.encoding") + "<br>");
out.println("Default Charset: " + Charset.defaultCharset() + "<br>");
out.println("中文测试");
%>
访问该页面,确认中文显示正常。