如何将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协议下的作法同理。工具

相关文章
相关标签/搜索