【问题标题】:using SLF4J to Bridge JUL does't work使用 SLF4J 桥接 JUL 不起作用
【发布时间】:2014-12-31 12:57:31
【问题描述】:

我目前观察到第 3 方库(即 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
七月到 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>

有什么问题吗?

【问题讨论】:

    标签: java slf4j logback java.util.logging


    【解决方案1】:

    session调试开启JavaMail可以直接写入System.out。这可能是您看到控制台输出的原因。试试转吧off:

        Session s = Session.getInstance(props);
        s.setDebug(false);
    

    否则,您可以更改 JavaMail 记录器的 logger level

    java.util.logging.Logger.getLogger("javax.mail").setLevel(Level.WARNING);
    

    根 JavaMail 记录器名称是“javax.mail”。有关更改记录器级别的其他方法,请参阅java.util.logging: how to set level by logger package (or prefix)?

    JavaMail 1.3 FCS RELEASE 是第一个支持通过输出流进行调试的版本。 default System.out 作为默认调试流返回。 JavaMail 1.4.6 是第一个适应使用 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 的陈旧值。这可能是您看到的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多