log4j 發郵件(解決中文亂碼)

來源:互聯網
上載者:User

  關於log4j發郵件的功能,就是在項目上線使用後,為了更好的維護系統,我們可以將記錄項目情況的log以郵件形式發送給administor,及時瞭解系統遇到的問題。並且及時修正,更高效方便。

準備流程:

  1、首先準備log4j-1.2.15.jar,注意只有log4j-1.2.14.jar後的版本方支援郵件發送功能。以及郵件發送的jar包activation.jar、mail.jar。

    2、在項目中架好log4j:首先在src源檔案下建立一個log4j.properties,並在原先內容後追加如下:

 

  ## MAIL log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender # 記錄error等級得錯誤 log4j.appender.MAIL.Threshold=ERROR #當日誌到達126k時,發送郵件 log4j.appender.MAIL.BufferSize=126 #郵件伺服器 log4j.appender.MAIL.SMTPHost=smtp.163.com #是否列印調試資訊 log4j.appender.MAIL.SMTPDebug=true #郵件主題 log4j.appender.MAIL.Subject=Log4J ErrorMessage #郵箱登陸帳號 log4j.appender.MAIL.SMTPUsername=***@163.com #郵箱登陸密碼 log4j.appender.MAIL.SMTPPassword=*** #郵件發送方 log4j.appender.MAIL.From=***@163.com #郵件接收方 log4j.appender.MAIL.To=***@163.com #日誌顯示格式 log4j.appender.MAIL.layout.ConversionPattern==%d{yyyy-MM-dd HH:mm:ss} - %c -%-4r [%t] %-5p %c %x - %m %l%n

  到這裡,如果你操作沒問題,其實可以測試一下,應該就可以將log中的記錄成功發送到指定郵箱中。但是,如果有中文錯誤資訊,你是否發現有亂碼呢。。別苦惱,有辦法解決。

其實日誌顯示格式都是指定了某一個layout,羅列幾種顯示方式: (哎……不能用圖片)

SimpleLayout:ERROR-在關鍵字"from"附件有錯誤。

HTMLLayout:顯示類似表格顯示效果:

Time  Thread        Level  Category          Message                    

0     http-8080-1   ERROR  dao.DownloadDao   在關鍵字"from"附近有語法錯誤

Layout是個抽象類別,其子類是很多種顯示格式,那麼比如我想用HTMLLayout,那麼我定義一個類,讓其繼承HTMLLayout,然後重寫其getContentType方法,另外因為上面這幾種layout顯示方式沒有顯示出錯誤所在,不方便進行錯誤定位,所以我們可以自己寫上一個方法,我也自己寫了個,在此貼出來供大家參考。

 

package dao; import org.apache.log4j.Layout; import org.apache.log4j.SimpleLayout; import org.apache.log4j.spi.LoggingEvent; public class MailEvaluator extends Layout{ StringBuffer sbuf; @Override public String getContentType() { return "text/html;charset=GBK"; } public MailEvaluator() { sbuf = new StringBuffer(128); } @Override public String format(LoggingEvent event) { sbuf.setLength(0); sbuf.append("錯誤等級:"+event.getLevel().toString()+"==="); sbuf.append("錯誤原因:"+event.getMessage().toString()+"==="); sbuf.append("錯誤所在類"+event.getLocationInformation().getClassName()+"==="); sbuf.append("錯誤方法所在:"+event.getLocationInformation().getMethodName()+"==="); sbuf.append("錯誤行:"+event.getLocationInformation().getLineNumber()); return sbuf.toString(); } @Override public boolean ignoresThrowable() { // TODO Auto-generated method stub return false; } public void activateOptions() { // TODO Auto-generated method stub } }

其實主要就是覆蓋了基類中兩個方法,這樣就基本完成了利用log4j發郵件,並且能夠正確定位錯誤所在,以便及時修正。

效果就是:

錯誤等級:ERROR===錯誤原因:在關鍵字 'from' 附近有語法錯誤。 

錯誤所在類dao.DownloadDao===錯誤方法所在:doLogin===錯誤行:97

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.