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" 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)設置字符集。


免責聲明!

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



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