解决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编码,就是上面工具栏的地球标志
在这里插入图片描述

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