Log4J發日誌郵件給多個接收者及標題、正文亂碼問題

以前開發的系統沒有單獨的日誌管理,所有的日誌統一輸出到tomcat後臺一個文件裏,不幾天就是好幾G,現在要整體增加一個Log4J管理日誌的功能,其實這方面的資料網上多的是。發郵件的配置說明也有,但是具體怎麼發,亂碼問題怎麼解決那就比較少了。

       利用javamail發送郵件,你需要導入包mail.jar和activation.jar這兩個包 ,否則是沒法發郵件的 ,下邊配置文件裏綠色行顯示的就是發給兩個接收者ac和ae。

       這裏會出現中文亂碼問題,主要有兩方面的亂碼,一是標題亂碼;二是正文亂碼。下邊具體說明這兩種亂碼的解決方案。
一、 標題亂碼
Log4J日誌郵件的標題在配置文件log4j.properties裏設定,如下
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
[email protected]
[email protected]
log4j.appender.MAIL.Subject= Log4J提醒您:系統發生了嚴重錯誤
log4j.appender.MAIL.To=ac @163.com,[email protected]
log4j.appender.MAIL.layout=com.sun.DefineLayOut
log4j.appender.MAIL.layout.LocationInfo=true


       灰色的行就是標題,log4J配置文件默認的讀取方式是ISO-88591,遇到中文會出現亂碼,我們可以把這個配置文件log4j.properties用jdk的工具native2asii轉換一下編碼方式。
命令:native2asii log4j.properties log4jxx.properties
把這個log4jxx.properties改名爲log4j.properties取代原來的log4j.properties就ok了。
灰色行重新編碼後是:
log4j.appender.MAIL.Subject=Log4J/u63d0/u9192/u60a8/uff1a/u7cfb/u7edf/u53d1/u751f/u4e86/u4e25/u91cd/u9519/u8bef

二、 正文亂碼
        正文亂碼,解決也比較簡單。閱讀Log4J的源碼類SMTPAppender,我們可以發現sendBuffer()方法中有這樣一句:
part.setContent(sbuf.toString(), layout.getContentType());
我們繼續追蹤發現layout就是配置文件裏的layout屬性對應的佈局模式。但是這些佈局模式都是繼承自Layout,而contentType是隻 可通過getContentType方法取得,不能修改。所有的佈局模式getContentType方法返回的都是”text/plain”;
爲處理中文亂碼,我們可以寫一個佈局模式。如果你要使用HTMLLayout,我們就寫一個HTMLLayout的子類,覆蓋HTMLLayout的 getContentType方法即可。假如我要用org.apache.log4j.HTMLLayout。我們就可以寫一個DefineLayOut 類,代碼如下:
package com.sun;

import org.apache.log4j.HTMLLayout;
public class DefineLayOut extends HTMLLayout{
public String getContentType() {
return "text/html;charset=GBK";
}
}
對應的配置文件設置如黃色行所示。

 

http://www.blogjava.net/henry1451/articles/205358.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章