1. 程式人生 > >log4j 控制檯和檔案輸出亂碼問題解決

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控制檯也有是編碼的,而且,不僅僅是有,你還可以為每個執行的程式,設定獨立的編碼。

自然,這裡的編碼匹配了,也就不會亂碼了。