以前開發的系統沒有單獨的日志管理,所有的日志統一輸出到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
log4j.appender.MAIL.From=ab@163.com
log4j.appender.MAIL.SMTPHost=smtp@163.com
log4j.appender.MAIL.Subject= Log4J提醒您:系統發生了嚴重錯誤
log4j.appender.MAIL.To=ac@163.com,ae@163.com
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";
}
}
對應的配置文件設置如黃色行所示。
呵呵,覺得第二點的思路不錯,即要學會怎樣改開源的東西,以適合自已所需.
posted on 2008-06-02 10:02
henry1451 閱讀(963)
評論(0) 編輯 收藏 所屬分類:
開源技術