Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)

1.启动tomcat时,控制台中中文没有乱码,但是项目启动到一定阶段,当输出项目中的日志文件时,此时中文出现了乱码

刚开始启动时如下图,没有乱码:

Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)

启动完成后项目中输出日志信息时,中文乱码

Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)

在网上搜了一堆解决乱码的方法,但是仍然解决不了

网上解决办法一:(有些网友通过该方法确实已解决,但我的问题没解决!!

 1、${CATALINA_HOME}/conf/logging.properties

 2、添加语句:java.util.logging.ConsoleHandler.encoding = GBK 或者把UTF-8改成GBK

 3、重启tomcat,查看日志数据即可!

解决办法二:

网上说是:catalina.bat中必须设置为UTF-8,如果我不设置为UTF-8,页面接收到的就是乱码了,尝试过各种UTF-8的调试,都无解,最后还是只能在catalina.bat的set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%  -Dfile.encoding=UTF-8" ,加上UTF-8,重启以后仍然未解决。

上述办法尝试之后我的问题仍然没有解决!!!此时想到是不是跟项目有关?

1. 确定项目编码是utf-8以后,将所有能换的GBK都换成了UTF-8,重启以后还是未解决。

2.再次查看方法一中为何改要修改logging.properties ,然后打开发现打开catalina.bat发现LOGGING_CONFIG中${CATALINA_BASE}关键字,于是想到修改logging.properties是因为tomcat的日志配置,日志管理中对于日志在控制台的输出配置为:java.util.logging.ConsoleHandler.encoding = GBK ,而且在LOGGING_CONFIG中使用了${CATALINA_BASE}

如下所示:

Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)

     而我们一般配置tomcat环境变量时会使用该变量CATALINA_BASE,那么我的理解是调用这个目录下的tomcat的logging.properties进行日志控制台输出配置,而我根本就没有配置tomcat的环境变量,于是想到问题原因所在了,既然tomcat控制台基本信息中中文不是乱码,直到项目中日志信息输出时中文乱码了,于是想到了项目中对于日志配置使用了 log4j.properties ,而且在log4j.properties配置中对于控制台的输出是不是使用的是UTF-8编码,如下图所示:

Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)

果然,这里使用的是UTF-8,而项目中对于日志使用的就是log4j,最后将log4j.properties配置文件中项目的中文在控制输出配置UTF-8修改为GBK,问题解决!

        最后尝试把logging.properties 配置java.util.logging.ConsoleHandler.encoding = GBK 删了或者修改为UTF-8,都不会出现项目日志信息中文乱码,此时才恍悟,解决tomcat控制台中文乱码不要只盯着tomcat的配置,一定还要考虑项目中日志文件配置。

如下图所示:修改后重启问题解决!!!!

Tomcat中文乱码解决纪要(不要只盯着tomcat的配置)