以前開(kāi)發(fā)的系統(tǒng)沒(méi)有單獨(dú)的日志管理,所有的日志統(tǒng)一輸出到tomcat后臺(tái)一個(gè)文件里,不幾天就是好幾G,現(xiàn)在要整體增加一個(gè)Log4J管理日志的功能,其實(shí)這方面的資料網(wǎng)上多的是。發(fā)郵件的配置說(shuō)明也有,但是具體怎么發(fā),亂碼問(wèn)題怎么解決那就比較少了。
利用javamail發(fā)送郵件,你需要導(dǎo)入包mail.jar和activation.jar這兩個(gè)包 ,否則是沒(méi)法發(fā)郵件的 ,下邊配置文件里綠色行顯示的就是發(fā)給兩個(gè)接收者ac和ae。
這里會(huì)出現(xiàn)中文亂碼問(wèn)題,主要有兩方面的亂碼,一是標(biāo)題亂碼;二是正文亂碼。下邊具體說(shuō)明這兩種亂碼的解決方案。
一、 標(biāo)題亂碼
Log4J日志郵件的標(biāo)題在配置文件log4j.properties里設(shè)定,如下
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提醒您:系統(tǒng)發(fā)生了嚴(yán)重錯(cuò)誤
log4j.appender.MAIL.To=ac@163.com,ae@163.com
log4j.appender.MAIL.layout=com.sun.DefineLayOut
log4j.appender.MAIL.layout.LocationInfo=true
灰色的行就是標(biāo)題,log4J配置文件默認(rèn)的讀取方式是ISO-88591,遇到中文會(huì)出現(xiàn)亂碼,我們可以把這個(gè)配置文件log4j.properties用jdk的工具native2asii轉(zhuǎn)換一下編碼方式。
命令:native2asii log4j.properties log4jxx.properties
把這個(gè)log4jxx.properties改名為log4j.properties取代原來(lái)的log4j.properties就ok了。
灰色行重新編碼后是:
log4j.appender.MAIL.Subject=Log4J\u63d0\u9192\u60a8\uff1a\u7cfb\u7edf\u53d1\u751f\u4e86\u4e25\u91cd\u9519\u8bef
二、 正文亂碼
正文亂碼,解決也比較簡(jiǎn)單。閱讀Log4J的源碼類(lèi)SMTPAppender,我們可以發(fā)現(xiàn)sendBuffer()方法中有這樣一句:
part.setContent(sbuf.toString(), layout.getContentType());
我們繼續(xù)追蹤發(fā)現(xiàn)layout就是配置文件里的layout屬性對(duì)應(yīng)的布局模式。但是這些布局模式都是繼承自Layout,而contentType是只可通過(guò)getContentType方法取得,不能修改。所有的布局模式getContentType方法返回的都是”text/plain”;
為處理中文亂碼,我們可以寫(xiě)一個(gè)布局模式。如果你要使用HTMLLayout,我們就寫(xiě)一個(gè)HTMLLayout的子類(lèi),覆蓋HTMLLayout的getContentType方法即可。假如我要用org.apache.log4j.HTMLLayout。我們就可以寫(xiě)一個(gè)DefineLayOut類(lèi),代碼如下:
package com.sun;
import org.apache.log4j.HTMLLayout;
public class DefineLayOut extends HTMLLayout{
public String getContentType() {
return "text/html;charset=GBK";
}
}
對(duì)應(yīng)的配置文件設(shè)置如黃色行所示。
呵呵,覺(jué)得第二點(diǎn)的思路不錯(cuò),即要學(xué)會(huì)怎樣改開(kāi)源的東西,以適合自已所需.
posted on 2008-06-02 10:02
henry1451 閱讀(968)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
開(kāi)源技術(shù)