<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    Log4j的郵件功能能夠為我們做這樣的事情----當程序運行完的時候,或者正在運行也是可以的,它將程序的日志通過郵件的方式發到你的郵箱上。

    ??? 這樣,對于程序運行的控制就不用每次都跑到機器上去看日志文件這么麻煩了,我們需要的只是,開開Foxmail,用用鼠標,就可以知道,程序到底運行的怎么樣了。

    ???

    • ??? 使用log4j-1.2.15

    ?????????????? 之前用的是 log4j-1.2.8 ,照理說,它們之間的版本號的區別夠小,應該沒有什么區別,但是事實卻讓我丈二摸不著頭腦。

    ?????????????發送郵件的一個重要的類是SMTPAppender。

    ???????????? 在1.2.8的版本中,SMTPAppender沒有smtpPassword 和smtpUsername 屬性。這兩個屬性分別是登錄smtp服務器用的用戶名和密碼。筆者到現在也沒有想明白,在通常的情況下怎樣才可以不登錄smtp服務器就可以發送郵件了。 有知道的朋友,就留個言吧,先謝過啦。

    ????????????? 由于不能解決上面的那個問題,我就只好使用1.2.15這個版本啦。

    • ???log4j.properties文件

    ???????????

    Java代碼
    1. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender??
    2. ??
    3. log4j.appender.MAIL.BufferSize=10??
    4. ??
    5. log4j.appender.MAIL.From=yourname@?domain.com??
    6. ??
    7. log4j.appender.MAIL.SMTPHost=mail.domain.com??
    8. ??
    9. log4j.appender.MAIL.Subject=Log4J?Message??
    10. ??
    11. log4j.appender.MAIL.To=target@domain.com??
    12. ??
    13. log4j.appender.MAIL.SMTPUsername=username??
    14. ??
    15. log4j.appender.MAIL.SMTPPassword=password??
    16. ??
    17. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout??
    18. ??
    19. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout??
    20. ??
    21. log4j.appender.MAIL.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n??

    ???????????這個文件配好以后,恭喜你,現在log4j的郵件功能,你就可以體會了。

    • ? SMTP的級別默認是ERROR級別的,怎么辦

    ???????????? 默認的級別是ERROR級別的,那就是說,只有程序出錯了,你才可以收到郵件,很顯然,這還不能滿足我們日常管理的要求。我們需要自定義的級別。

    ??????????? 為此,筆者繼承了TriggeringEventEvaluator類,覆蓋里面的一個方面,如下所示

    Java代碼
    1. @Override??
    2. ????public?boolean?isTriggeringEvent(LoggingEvent?arg0)?{??
    3. ????????return?arg0.getLevel().isGreaterOrEqual(Level.INFO);??
    4. ????}??

    ?

    • ?? 每遇到一個觸發事件就發一封郵件!

    ??????????? SMTPAppender 實現是,每當isTriggeringEvent()這個方法返回true的時候,它都會發送郵件。這樣的話,一個程序執行下來,每個有能力觸發的事件都會形成一封郵件。這顯然不是我們希望看到的場面。

    ??????????? 筆者繼承了SMTPAppender類,重裝了append方法。??????????

    Java代碼
    1. @Override??
    2. ????public?void?append(LoggingEvent?event)?{??
    3. ??
    4. ????????if?(!checkEntryConditions())?{??
    5. ????????????return;??
    6. ????????}??
    7. ??
    8. ????????event.getThreadName();??
    9. ????????event.getNDC();??
    10. ????????event.getMDCCopy();??
    11. ????????if?(this.getLocationInfo())?{??
    12. ????????????event.getLocationInformation();??
    13. ????????}??
    14. ????????cb.add(event);??
    15. ????????if?(evaluator.isTriggeringEvent(event))?{??
    16. ????????????if?(cb.length()?>?this.getBufferSize()?/?2)?{??
    17. ????????????????sendBuffer();??
    18. ????????????}??
    19. ??
    20. ????????}??
    21. ????}??

    ????????? 這樣的話,當事件的個數達到bufferSize的一半的時候就會發一封郵件了。

    ????????? 但是另外一個問題也隨之產生了,當程序結束時,還在緩沖里面的事件是不會被發送出來的。因為事件數往往沒有bufferSize的一半。

    ?????????

    Java代碼
    1. public???*****SMTPAppender()?{??
    2. ????????Runtime.getRuntime().addShutdownHook(new?Thread()?{??
    3. ??
    4. ????????????@Override??
    5. ????????????public?void?run()?{??
    6. ????????????????if?(cb.length()?>?0)?{??
    7. ????????????????????sendBuffer();??
    8. ????????????????}??
    9. ??
    10. ????????????}??
    11. ??
    12. ????????});??
    13. ????}??

    ?

    ???????? 筆者在構造函數中,添加了一個程序結束時運行的線程,來處理這個問題。

    • ? 設置Html格式的輸出

    ??????????? 按照剛剛筆者給出的配置文件,所產生的郵件的格式是純文本的。其實log4j有網頁格式的輸出的。

    ???????????

    Property文件代碼
    1. log4j.appender.MAIL.layout=org.apache.log4j.HTMLLayout??

    ?

    ????????? 這樣的話,郵件就好看很多啦。

    • ? 解決郵件中的中文亂碼問題

    ??????????? 最后,你會發現中文是亂碼的,而且HTMLLayout沒有提供編碼方式的屬性設置,哎,又是一陣無語中。

    ?????????? 得,筆者也就只好再寫一個類,繼承HTMLLayout,覆蓋getContentType方法

    ??????????

    Java代碼
    1. @Override??
    2. ????public?String?getContentType()?{??
    3. ????????return?"text/html;charset=GBK";??
    4. ??
    5. ????}??

    ?????????? 添加上述功能之后的配置文件如下所示:

    Java代碼
    1. log4j.appender.MAIL.To=target@domain.com??
    2. ??
    3. log4j.appender.MAIL.From=yourname@domain.com??
    4. ??
    5. log4j.appender.MAIL.SMTPHost=smtp.domain.com??
    6. ??
    7. log4j.appender.MAIL.Subject=?Information??
    8. ??
    9. log4j.appender.MAIL.SMTPUsername=username??
    10. ??
    11. log4j.appender.MAIL.SMTPPassword=password??
    12. ??
    13. log4j.appender.MAIL.EvaluatorClass=com.wole.***.MailEvaluator??
    14. ??
    15. log4j.appender.MAIL.layout=com.wole.log4j.net.DefaultLayOut?
    posted on 2009-07-22 11:12 禮物 閱讀(1552) 評論(0)  編輯  收藏 所屬分類: Log
    主站蜘蛛池模板: 99久久久国产精品免费牛牛| 五月婷婷亚洲综合| 亚洲卡一卡二卡乱码新区| 超pen个人视频国产免费观看| 高清免费久久午夜精品| 亚洲人成网站影音先锋播放| 天天摸夜夜摸成人免费视频| 久久性生大片免费观看性| 亚洲天堂2016| 亚洲人成网77777色在线播放| 国产成人无码免费看视频软件| 四虎影视久久久免费| 亚洲精品一卡2卡3卡三卡四卡| 国产91在线免费| 97视频免费在线| 91视频免费网站| 成人亚洲国产精品久久| 亚洲国语精品自产拍在线观看| 国产成人精品123区免费视频| 91视频免费网址| ww在线观视频免费观看w| 亚洲第一区二区快射影院| 亚洲无线码在线一区观看| 成年女人毛片免费播放视频m | 国产精品免费看久久久香蕉| 亚洲人成毛片线播放| 国产亚洲精品va在线| 国产v片免费播放| 国产精品成人免费视频网站京东| 光棍天堂免费手机观看在线观看 | 99精品全国免费观看视频..| 亚洲私人无码综合久久网| 亚洲一区二区三区日本久久九| 国产精品亚洲精品日韩已方| 在线观看免费毛片| 91免费播放人人爽人人快乐| 久久国产乱子精品免费女| 一级毛片免费播放男男| 国产精品自拍亚洲| 亚洲人成人网站18禁| 亚洲伊人久久大香线焦|