9

setDebug(true)JavaMail セッションでストリームをキャプチャしてロギング フレームワークで使用するにはどうすればよいですか? (ソースのダウンロード、ストリームをパラメーターとして受け入れるメソッドの変更、再コンパイルなどを除く)

より一般的には、この方法でジェネリック ストリーム出力を「ハイジャック アンド リダイレクト」する Java の標準的な方法はありますか? System.out はすでに他の出力で汚染されている可能性があり、それを「フィルタリング」する方法がわかりません...

4

1 に答える 1

11

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();
        }
于 2012-09-23T23:59:54.023 に答える