JavaMail setDebug(true)
如何在JavaMail会话上捕获流并在日志框架中使用它?(除了下载源代码、更改方法以接受流作为参数、重新编译流等)JavaMail setDebug(true),java,stream,jakarta-mail,Java,Stream,Jakarta Mail,如何在JavaMail会话上捕获流并在日志框架中使用它?(除了下载源代码、更改方法以接受流作为参数、重新编译流等) 更一般地说,Java中是否有一种标准的方法可以以这种方式“劫持并重定向”通用流输出?请注意,System.out可能已经被其他输出污染,我不知道如何“过滤”它…您可以将打印流链接到ByteArrayOutputStream,告诉JavaMail使用您的打印流,执行JavaMail操作,最后将ByteArrayOutputStream的内容转储到您喜爱的记录器 Byt
更一般地说,Java中是否有一种标准的方法可以以这种方式“劫持并重定向”通用流输出?请注意,System.out可能已经被其他输出污染,我不知道如何“过滤”它…您可以将打印流链接到ByteArrayOutputStream,告诉JavaMail使用您的打印流,执行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();
}
一旦我将其设置为stream,并将调试保持在logger中,它就不再显示在控制台中。是否有办法确保setdebug同时显示在控制台上?@daredevil,可能在
if(MAIL\u DEBUG)
中添加System.out.println(os.toString())代码>?我做到了。我试图在命令提示符下以jar文件的形式运行它,但没有;t输出到控制台。奇怪的MAIL\u DEBUG
在哪里声明?我没有使用if语句。MAIL\u DEBUG
只是一个标记,您可以定义它来控制程序的调试模式。它不是JavaMail的一部分。可以尝试使用System.err.println(os.toString())
我添加了这个System.out.print(“电子邮件发送成功\n”)代码>,它设法在命令提示符下打印出来,但没有在os.tostring上打印出来