log4j輸出日誌亂碼(轉)

來源:互聯網
上載者:User

標籤:就會   linux   字元集   block   eclipse   中文   pos   原因   字元   

log4j記錄檔亂碼問題的解決方案

log4j記錄檔中文亂碼處理方法

log4j 控制台和檔案輸出亂碼問題解決

寫在前面,第三篇文章中將原因解釋的最清楚,為什麼設定為UTF-8或者GBK就生效了,原因是類檔案的編碼和輸入日誌的編碼必須一致,否則就會出現亂碼。

 

轉:log4j記錄檔亂碼問題的解決方案

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

癥狀:在預設語言非中文(或者說預設語言不支援中文的)的Windows、Linux、Unix上,用log4j列印日誌,出現亂碼,常見的就是一堆問號。

解決方案:

如果是log4j.properties為設定檔,比如:

log4j.appender.A1=org.apache.log4j.RollingFileAppenderlog4j.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)設定字元集。

 

類檔案編碼與輸出日誌編碼不一致導致日誌亂碼

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

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

log4j輸出日誌亂碼(轉)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.