如何將javamail中的debug日誌輸出到應用的日誌框架中

    在使用javamail的時候,有時咱們會打開debug,讓javamail輸出debug日誌。可是,javamail默認是輸出到System.out中,若是應用使用的是log4j或logback之類的日誌框架,如何將javamail的debug日誌也統一由這些日誌框架來處理呢?java

    javamail中,日誌是使用PrintStream來輸出的,默認的實現是輸出到System.out,若是想自行實現PrintStream類,就能夠本身決定日誌輸出到哪裏了。javamail使用到了PrintStream的println(String line)方法和wrinte(byte[] bs,int off,int len)方法,因此咱們定義一個Log4JavaMail類繼承PrintStream,重寫這兩個方法。代碼地址爲:    https://github.com/goodjin/log4javamail.gitgit

    使用方式以下:    github

Log4JavaMail log4JavaMail = new Log4JavaMail(logger, "utf-8");//logger爲slf4j的日誌對象
Session session = Session.getInstance(props, null); // 得到郵件會話對象
session.setDebugOut(log4JavaMail); //設置將日誌輸出到工具類對象
session.setDebug(true);session

    在debug時每次都所有輸出整個郵件內容可能會致使日誌過多,也無必要,因此咱們能夠將郵件內容設置爲trace級別,這裏的作法是在遇到DATA命令時標記當前日誌爲郵件內容開始,遇到.\r\n時標記爲郵件內容結束 ,當輸出郵件內容時採用trace方法。框架

     最後:這裏只針對smtp發信作了日誌橋接,pop3,imap協議下的作法同理。工具

相關文章
相關標籤/搜索