posts - 60,comments - 71,trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(6)

          我參與的團(tuán)隊(duì)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          博客集錦

          資源與技術(shù)網(wǎng)站

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜


              以前開(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ù)
          主站蜘蛛池模板: 罗山县| 孟连| 汉川市| 安吉县| 安多县| 杨浦区| 伊川县| 昭平县| 临潭县| 白沙| 苏尼特左旗| 沁阳市| 和林格尔县| 昆明市| 高陵县| 三台县| 青神县| 元阳县| 宜州市| 淄博市| 景德镇市| 苍山县| 玉山县| 新绛县| 巫山县| 莱州市| 玉屏| 海南省| 焉耆| 中西区| 浙江省| 洛川县| 磐石市| 土默特右旗| 五寨县| 松溪县| 石泉县| 佛教| 屏东县| 白城市| 星子县|