近來(lái)不是很忙,看了看log4j,然后看到log4j里面有appender到mail的功能,個(gè)人做了點(diǎn)了解和實(shí)驗,寫(xiě)了個(gè)簡(jiǎn)單的demo做了點(diǎn)測試。
Log4j發(fā)送日志郵件的作用:
項目錯誤信息能及時(shí)(實(shí)時(shí))反映給項目維護人員以及相關(guān)負責人。
優(yōu)點(diǎn):
1.快速響應;
2.共同監督;
3.郵件正文直接顯示了錯誤信息,拷貝信息比登陸服務(wù)器再查找要方便;
4.在日志信息繼續寫(xiě)入文件的前提下,多了另外一種獲取信息的渠道。
首先:在apache官網(wǎng)下載相關(guān)最新的jar包,并在項目中引用(activation.jar,mail.jar),此外還有log4j的jar包,此例用的是(log4j-1.2.16.jar)
在測試的過(guò)程中發(fā)現了已下幾點(diǎn)問(wèn)題并解決,和大家分享下:
1.首先我測試的時(shí)候是用的info的級別,所以在發(fā)送mail的過(guò)程中出錯了,信息都不會(huì )打印出來(lái),并且mail也收不到,我就很奇怪,然后我把log的級別調成error,控制臺才打印出了mail 發(fā)送失敗的log信息,經(jīng)查閱發(fā)現:Log4j的SMTP的級別默認是ERROR級別
默認是ERROR級別,那就是說(shuō),只有程序出錯了,才可以收到郵件。不過(guò)可以自定義的級別,繼承TriggeringEventEvaluator類(lèi),具體實(shí)現見(jiàn)下方代碼:
此時(shí)比>=debug的級別都可以實(shí)現.
2 log報錯的信息看到了,報了如下的錯誤:
這個(gè)時(shí)候通過(guò)上網(wǎng)查找,才發(fā)現是我本地機器上裝了MACFEE殺毒軟件,該軟件里面的一個(gè)端口保護規則將port 25給阻止了,禁止群發(fā)郵件蠕蟲(chóng)發(fā)送郵件。然后把殺軟關(guān)了或者把該規則去掉就ok 了
3 去掉以后還是會(huì )報
4雖然連接163郵件服務(wù)器成功,可是此時(shí)還是會(huì )報AuthenticationFailedException異常,經(jīng)查閱,是郵件服務(wù)器要對from 郵件的用戶(hù)名和密碼做認證,認證過(guò)了才能發(fā)送,可是這個(gè)時(shí)候我并沒(méi)有發(fā)現我的log4j的參數文件里面可以配置SMTPUsername的屬性,經(jīng)查閱發(fā)現我當前用的是log4j1.2.6,在1.2.6的版本中,SMTPAppender沒(méi)有SMTPPassword 和SMTPUsername 屬性,更談不上驗證了。這兩個(gè)屬性分別是登錄SMTP服務(wù)器發(fā)送認證的用戶(hù)名和密碼。1.2.9之后的版本才有這兩個(gè)屬性。
log4j也提供了郵件認證的API,但是網(wǎng)上有網(wǎng)友也遇到這樣的問(wèn)題,解決方法A 自定義Appender 繼承org.apache.log4j.net.SMTPAppender,在這個(gè)類(lèi)里面封裝認證的邏輯,B使用log4j1.2。14以上版本,1.2.14以上版本集成了認證的功能,所以我果斷把我的1.2.6版本換成了1.2.16,果斷ok了。
聯(lián)系客服