解決Tomcat的Catalina日誌中文亂碼

網上很多解決方案,有說該server.xml的,有說該log4j.properties的

不過我按這些改了都沒生效。不過我也確實是改了上面的兩個文件,至於對修改成功的結果有沒有起到作用我也不知道,所以大家如果按我這個方法沒用的話再試試其他的吧

排查可能性

一、日誌亂碼,修改catalina.sh

  • 在Tomcat的/bin目錄下,打開catalina.sh
  • 在沒啓用insert模式下,鍵入/$LOGGING_MANAGER,按n鍵查找下一條,直到找到下面的代碼:
if [ -z "$LOGGING_MANAGER" ]; then

  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "

else 

  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"

fi
  • 註釋掉,修改爲

if [ -z "$LOGGING_MANAGER" ]; then

  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

else 

  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

fi

重啓tomcat

二、顯示頁面亂碼,修改server.xml

這個是針對展示頁面亂碼問題
加上URIEncoding

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
    redirectPort="8443"  URIEncoding="UTF-8"/>

三、日誌亂碼,http調用的亂碼

還有一種可能,就是tomcat部分日誌出現中文亂碼,而且這部分日誌都是打印的調用http請求後返回的值,這個時候很可能是代碼方面的原因

強烈建議response加上響應頭,響應方返回Response的時候:

response.setContentType("application/json;charset=utf-8");

糾結我兩天的日誌亂碼問題,原因就是這個,重點就是這個charset

這是響應方需要做的事,請求方拿到了相應後,也要注意這個問題,比如使用HttpClient,解析返回的Response

CloseableHttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, StandardCharsets.UTF_8);

Spring中使用RestTemplate的話,高版本應該沒這個問題,至少我沒遇到過。


@Bean
    public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
    	MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
    	//設置日期格式
    	ObjectMapper objectMapper = new ObjectMapper();
    	SimpleDateFormat smt = new SimpleDateFormat("yyyy-MM-dd");
    	objectMapper.setDateFormat(smt);
    	mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
    	//設置中文編碼格式
    	List<MediaType> list = new ArrayList<MediaType>();
    	list.add(MediaType.APPLICATION_JSON_UTF8);
    	mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
    	return mappingJackson2HttpMessageConverter;
    }

四、日誌亂碼,logging.properties

找到

java.util.logging.ConsoleHandler.encoding = utf-8這行

更改爲

java.util.logging.ConsoleHandler.encoding = GBK
或者反過來試試。

如果是tomcat9,把utf-8的設置去掉或者設置爲GBK

查看系統編碼是否一致

其他

看看linux系統默認編碼和xshell是不是一致,設置utf-8編碼,就是上面工具欄的地球標誌
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章