一、背景:
在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
好吧,解決了~~~~~~~