IDEA運行Tomcat,控制台日志亂碼


一、信息

IDEA:2019.1

Tomcat:9.0.24

二、問題描述

server中日志正常顯示,但Tomcat Catalina Log日志亂碼。

 

三、解決思路

既然出了亂碼,那肯定是編碼不統一,所以我將IDEA中設置編碼的地方(包括IDEA的配置文件)全都設置成了UTF-8,結果不但問題沒有解決,我的server和tomcat catalina log全部出現了亂碼。

https://www.cnblogs.com/aligege/p/10550432.html,翻到了這篇博客,博主思路很正確,不應當只修改IDEA中的編碼,還要修改Tomcat日志配置文件中的編碼,讓它們統一才行。

 

 這里的默認值是GBKSS,修改成UTF-8,依舊亂碼。改為GBK后,server的日志正常了,tomcat catalina log還是亂碼。

 

應該是catalina的相關配置文件,網上查了好幾篇博客都說修改這個文件,於是乎按照教程走,加上了-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8

if [ -z "$LOGGING_MANAGER" ]; then
  LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
fi

 

依舊亂碼,這里修改的是logging_manager的值,那這一行代碼是什么意思呢?跳到catalina.sh文件的最上方,tomcat不愧是頂級開源項目,人家這注釋寫的可真是太香了。

#   LOGGING_MANAGER (Optional) Override Tomcat's logging manager
#                   Example (all one line)
#                   LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

 

意思是覆蓋tomcat的日志管理器記錄,也就是說我們修改了日志管理器這里的編碼,但問題並未解決,這時我注意到這行注釋上方還有一段注釋。

#   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
#                   Example (all one line)
#                   LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"

 

意思是覆蓋tomcat的日志配置文件,難道這里覆蓋掉了?跳到文件下方代碼。

# Set juli LogManager config file if it is present and an override has not been issued
if [ -z "$LOGGING_CONFIG" ]; then
  if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then
    LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
  else
    # Bugzilla 45585
    LOGGING_CONFIG="-Dnop"
  fi
fi

 

我們可以看到tomcat catalina log日志配置配置文件就是我們剛才修改過的logging.properties文件,仔細看了一下文件中的內容后,原來tomcat catalina log日志配置的代碼就是下面這幾行。

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 90
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 90
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 90
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 90
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

試着將這幾行代碼中的UTF-8全部改為GBK后,問題圓滿解決。

四、遺留問題

之所以會出現亂碼,肯定是編碼格式不統一導致的。我們將tomcat的logging.properties配置文件中的編碼格式都設置成了GBK,IDEA中能找到的設置編碼的地方我都設置成了UTF-8,問題居然得到了解決。

五、猜想

IDEA中output輸出的內容編碼是GBK格式的,所以我們將tomcat輸出的日志編碼改為GBK后問題解決。但我確實沒找到IDEA中關於output輸出內容的編碼設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM