log4j輸出日誌亂碼(轉)

log4j日誌文件亂碼問題的解決方法linux

log4j日誌文件中文亂碼處理方法apache

log4j 控制檯和文件輸出亂碼問題解決app

寫在前面,第三篇文章中將緣由解釋的最清楚,爲何設置爲UTF-8或者GBK就生效了,緣由是類文件的編碼和輸入日誌的編碼必須一致,不然就會出現亂碼。post


 

轉:log4j日誌文件亂碼問題的解決方法
ui

近日在AIX上用log4j打印日誌,出現亂碼,通過努力解決問題。編碼

症狀:在默認語言非中文(或者說默認語言不支持中文的)的Windows、Linux、Unix上,用log4j打印日誌,出現亂碼,常見的就是一堆問號。spa

解決方法:.net

若是是log4j.properties爲配置文件,好比:日誌

log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=all.log

加入一行:code

log4j.appender.A1=org.apache.log4j.RollingFileAppender  
log4j.appender.A1.Encoding=UTF-8  
log4j.appender.A1.File=all.log  

若是是log4j.xml爲配置文件,好比:

<appender name="A1" class="org.apache.log4j.RollingFileAppender">  
        <param name="File" value="all.log" />  
        ......  
</appender>  

加入一行:

<appender name="A1" class="org.apache.log4j.RollingFileAppender">  
        <param name="Encoding" value="UTF-8" />  
        <param name="File" value="all.log" />  
        ......  
</appender>  

原理:

log4j經過QuietWriter寫日誌,QuietWriter extends FilterWriter,FilterWriter extends Writer,而Writer寫入的是字符流,對字符集比較敏感。英文系統通常默認latin-1字符集,只能處理半角,經過encoding指定字符集後,可以正確輸出指定字符集的字符流。

字符集指定後,WriterAppender的setEncoding經過org.apache.log4j.config.PropertySetter.setProperties(Object obj, Properties properties, String prefix)設置字符集。


 

類文件編碼與輸出日誌編碼不一致致使日誌亂碼

轉:log4j 控制檯和文件輸出亂碼問題解決

一個小問題,卻讓我感受到,如今真正動腦的人不多。。我來講說吧。

今天遇到一個小問題,log4j輸出到文件亂碼,控制檯正常。顯然是編碼問題致使。Google一搜,幾乎一水的說:

項目中log4j在英文版linux下輸出中文日誌爲亂碼。因爲log4j配置文件中沒有設置編碼格式(encoding),因此log4j就使用系統默認編碼。致使亂碼。解決方法是設置編碼格式UTF-8,方法爲:

log4j.appender.syslog.encoding=UTF-8 

這顯然是轉的,由於全網幾乎同樣。先不說這是properties配置的,還不是xml的。若是要xml的,配置以下:

<appender name="A1" class="org.apache.log4j.RollingFileAppender"> <param name="Encoding" value="UTF-8" /> <param name="File" value="all.log" /> ...... </appender> 

可是,我是已經設置成UTF-8,而亂碼了。因此,上述答案是不嚴謹的。

先說說筆者的狀況吧,其實筆者的問題很簡單,兩套log4j appender配置,一個輸出的文件,一個控制檯,文件的配置了utf-8編碼,控制檯沒配置。現象,控制檯正常,文件亂碼。

把文件的改爲gbk,不亂了。控制檯改爲gbk,亂碼。控制檯改爲utf-8,正常。到這裏你可能糊塗了。怎麼這麼亂?

其實道理很簡單,亂碼,天然是編碼不匹配。什麼匹配?log4jutf-8輸入,你文件是否是utf-8編碼的呢?檢查一下,果真不是,改爲utf-8編碼,解決。

你可能要問了,那控制檯的匹配在哪裏?Eclipse控制檯也有是編碼的,並且,不單單是有,你還能夠爲每一個執行的程序,設置獨立的編碼。

天然,這裏的編碼匹配了,也就不會亂碼了。

相關文章
相關標籤/搜索