Java 使用SLF4J桥接JUL does';行不通

Java 使用SLF4J桥接JUL does';行不通,java,slf4j,logback,java.util.logging,Java,Slf4j,Logback,Java.util.logging,我目前观察到一个第三方库(即javax.mail)正在使用java.util.logging。 javaMail的版本是1.4.7。 我想使用SLF4J LoggingFramwork将JUL连接到logback。 slf4j api版本为:logback core | 1.0.13 slf4j api|1.7.5 7月至slf4j | 1.7.5 在主函数中,我还通过调用以下命令以编程方式安装SLF4JBridgeHandler: // Optionally remove existing

我目前观察到一个第三方库(即javax.mail)正在使用java.util.logging。 javaMail的版本是1.4.7。 我想使用SLF4J LoggingFramwork将JUL连接到logback。 slf4j api版本为:logback core | 1.0.13
slf4j api|1.7.5
7月至slf4j | 1.7.5

在主函数中,我还通过调用以下命令以编程方式安装SLF4JBridgeHandler:

 // Optionally remove existing handlers attached to j.u.l root logger
   SLF4JBridgeHandler.removeHandlersForRootLogger();  

 // add SLF4JBridgeHandler to j.u.l's root logger, should be done once during
 // the initialization phase of your application
  SLF4JBridgeHandler.install();
但是它确实可以工作,javaMail还将调试信息记录在我的控制台中。我的logbak.xml是

  <root level="INFO">
      <appender-ref ref="STDOUT" />
   </root>

有什么问题吗?

启用调试后,JavaMail可以直接写入System.out。这可能就是您看到控制台输出的原因。试着转动它:

否则,您可以更改JavaMail记录器的设置

java.util.logging.Logger.getLogger("javax.mail").setLevel(Level.WARNING);
根JavaMail记录器名称为“javax.mail”。有关更改记录器级别的其他方法,请参阅


JavaMail 1.3 FCS版本是第一个支持通过输出流进行调试的版本。By System.out作为默认调试流返回。是第一个适用于使用java.util.logging的版本。旧式应用程序仍然支持前面的行为。

在我的环境中,javaMail调试可能默认打开。如何关闭日志?java.util.logging.Logger.getLogger(“javax.mail”).setLevel(Level.WARNING);命令不起作用。对不起,我忘了细节。我正在使用org.springframework.mail.javamail.JavaMailSenderImpl,它在钩子下使用javamail发送电子邮件。这会影响日志吗?不应该改变任何东西。设置session.setDebug(false)有效吗?我注意到的另一件事是,JavaMail中使用的MailLogger可能会缓存debug boolean和debugOut printstream的过时值。这可能是您看到的一个bug。
java.util.logging.Logger.getLogger("javax.mail").setLevel(Level.WARNING);