<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
    主站蜘蛛池模板: 日本免费一区二区三区最新| 在线涩涩免费观看国产精品| 国产亚洲AV夜间福利香蕉149 | 免费观看的毛片手机视频| 久久国产一片免费观看| 成人亚洲国产va天堂| 亚洲综合色丁香麻豆| 亚洲色无码一区二区三区| 夜色阁亚洲一区二区三区| 国产日本一线在线观看免费| 曰批全过程免费视频在线观看无码| 精品久久久久久久久亚洲偷窥女厕| 久久精品国产99国产精品亚洲| 亚洲av日韩av天堂影片精品| 中文字幕亚洲一区二区va在线| 亚洲成a人片在线观看国产| 最近2019中文字幕mv免费看 | 亚洲国产精品无码中文lv| 中文字幕亚洲综合小综合在线| 亚洲AV无码国产精品色| 亚洲一级片在线观看| 亚洲日韩久久综合中文字幕| 亚洲日产乱码一二三区别| 亚洲精品无码永久在线观看男男| 亚洲熟女综合一区二区三区| 亚洲国产精品美女久久久久| 亚洲国产成人久久综合| caoporn成人免费公开| a级午夜毛片免费一区二区| 久久久久久毛片免费播放| 97碰公开在线观看免费视频| 日本免费一本天堂在线| 亚洲午夜久久久影院| 亚洲中文字幕久久精品无码2021 | 永久在线免费观看| 无码国模国产在线观看免费| 久久国产成人亚洲精品影院| 久久久久久a亚洲欧洲AV| 美女裸体无遮挡免费视频网站| a级在线观看免费| 国产网站免费观看|