2015-12-21 59 views
2

我有一個奇怪的問題,我用log4j打印日誌到控制檯打印錯誤的字符,但使用System.out.println工作正常。Intelli-j tomcat服務器控制檯編碼問題與log4j的編碼= UTF-8?

我已經明確地設置編碼設置爲UTF-8:

log4j.rootLogger=DEBUG,console,error 
####################Conole logs###################### 
log4j.appender.console= org.apache.log4j.ConsoleAppender 
log4j.appender.console.encoding=UTF-8 ###Here , if I commented this line, it works fine 
log4j.appender.console.Threshold = DEBUG 
log4j.appender.console.layout=org.apache.log4j.SimpleLayout 
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 

同一行中,我使用:

 LogUtil.debug(line); 
     System.out.println("from system.out: "+line); 

控制檯:

DEBUG - 閭d簺騫存垜浠竴璧瘋拷榪囩殑濂衝=鑷存垜浠粓灝嗛�濆幓鐨勯潚鏄� 
from system.out: 那些年我們一起追過的女孩=致我們終將逝去的青春 

但是,如果我註釋掉log4j.appender.console.encoding=UTF-8,它的工作!

請注意,當我使用eclipse之前,exsting的代碼工作正常,但今天我試圖運行它在我的IDEA14然後找到問題。

猜測它可能是在默認控制檯上的一些編碼設置問題?

PS:我的項目的編碼設置爲UTF-8以及

+0

這也是我的猜測。當您顯式指定log4j的編碼時,它會覆蓋默認行爲。我相信默認行爲是讓System.Out.Print()函數處理編碼轉換。 –

回答

0

Java使用環境線索來設置適當的編碼上System.out,如locale或代碼頁(chcp)。

AFAIK,Intellij使用項目的字符編碼來設置解釋的控制檯編碼。

通過在Log4j中定義編碼,您可能會加倍編碼或選擇錯誤的編碼,正如您找到的。

+0

我將項目編碼設置爲utf-8,所以你的意思是我對消息進行了雙重編碼:'通過在Log4j中定義編碼,就有可能對編碼進行雙重編碼' – Jaskey