一、背景:
在linux上部署了一个tomcat容器,用来运行服务。其中tomcat是7版本,也是官网刚下的。
二、问题:
部署服务完成后,Xshell 启动服务,啪啦啪啦。。。程序的日志打印出来,控制台 出现大量的中文日志乱码。
三、解决:
1、首先看下服务器系统的编码
执行命令:echo $LANG
是美版 UTF-8格式,所以要去检查 Xshell 终端的编码格式
设置的就是UTF-8模式啊。
2、尝试修改Xshell终端的编码格式为其他的如: GBK(中文格式)
这里修改,或者在连接会话里改,
3、再次重启,看tomcat打印日志
噢no~~~~还是乱码,还是换种格式的乱码了。说明不是简单改个终端中文格式就能解决的。
4、再思考下,乱码无非是系统编码问题、终端编码问题、或者两者不一致问题。
对~~~还有,本身程序文件是否就是乱码。
打开程序.class文件,还是我多虑了,是正常的。
5、或者是不是 系统 美版UTF-8原因和终端的UTF-8配不上引起。
正在考虑修改系统的 en_US.UTF-8为 中文的 zh_CN.UTF-8。
随口问了下同事,他说他部署打印中文是正常的,然后我打消了这个念头。说明问题不是出在系统编码上。要是改了还 不确定会不会影响别人。
6、我擦,我漏掉了tomcat这个锅。根据差异定位到了是不是tomcat编码设置引起的。
我先去conf文件夹下的 server.xml 看下服务HTTP请求协议有没有设置编码格式。
好吧,其实也是utf-8编码。
7、最后一根稻草,查看catalina.sh里面的日志管理器
在bin文件夹下 根据LOGGING_MANAGER搜索找到
if [ -z "$LOGGING_MANAGER" ]
将
if [ -z "$LOGGING_MANAGER" ]; then
LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
fi
改为:
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF-8-Dsun.jnu.encoding=UTF-8"
fi
启动后还是 乱码,绝望中~~~~
8、日志管理 改为中文编码格式 GBK
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=GBK -Dsun.jnu.encoding=GBK"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=GBK-Dsun.jnu.encoding=GBK"
fi
好吧,解决了~~~~~~~