log4j日誌文件亂碼問題的解決方法
近日在AIX上用log4j打印日誌,出現亂碼,經過努力解決問題。
症狀:在默認語言非中文(或者說默認語言不支持中文的)的Windows、Linux、Unix上,用log4j打印日誌,出現亂碼,常見的就是一堆問號。
解決方法:
如果是log4j.properties為配置文件,比如:
log4j.appender.A1=org.apache.log4j.RollingFileAppender log4j.appender.A1.File=all.log
加入一行:
log4j.appender.A1=org.apache.log4j.RollingFileAppender log4j.appender.A1.Encoding=UTF-8 log4j.appender.A1.File=all.log
如果是log4j.xml為配置文件,比如:
<appender name="A1" > <param name="File" value="all.log" /> ...... </appender>
加入一行:
<appender name="A1" > <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)設置字符集。
最後更新:2017-04-02 04:01:42