JavaMail setDebug(true)

Rob*_*ino 8 java jakarta-mail stream

我如何setDebug(true)在JavaMail会话上捕获流并在我的日志记录框架中使用它?(没有下载源,更改方法接受流作为参数,重新编译它,...)

更一般地说,Java中是否存在以这种方式"劫持和重定向"通用流输出的标准方法?请注意,System.out可能已被其他输出污染,我不知道如何"过滤"...

Rea*_*wTo 10

您可以将PrintStream链接到ByteArrayOutputStream,告诉JavaMail使用您的PrintStream,执行JavaMail的操作,最后将ByteArrayOutputStream的内容转储到您喜欢的记录器.

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        PrintStream ps = new PrintStream(os);
        Session mailSession = Session.getDefaultInstance(props, null);
        try {
           if (MAIL_DEBUG) {
                logger.info("JAVAMAIL debug mode is ON");
                mailSession.setDebugOut(ps);
                mailSession.setDebug(true);  
            }
            ...
            transport.close();
            if (MAIL_DEBUG) {
                logger.info(os);
            }
        }
          finally {
            ps.close();
            os.close();
        }
Run Code Online (Sandbox Code Playgroud)