Использование SLF4J для моста JUL не работает

В настоящее время я наблюдаю, что сторонняя библиотека (а именно javax.mail) использует java.util.logging. Версия javaMail - 1.4.7. Я хочу использовать SLF4J LoggingFramwork, чтобы соединить JUL для выхода из системы. версия API slf4j: logback-core|1.0.13
SLF4J-апи | 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>

что-то не так?

1 ответ

Решение

С включенной отладкой сеанса JavaMail может напрямую записывать в System.out. Возможно, именно поэтому вы видите вывод консоли. Попробуйте отключить его:

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

В противном случае вы можете изменить уровень регистратора для регистраторов JavaMail.

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

Корневое имя регистратора JavaMail - "javax.mail". См. Java.util.logging: как установить уровень с помощью пакета (или префикса)? для других способов изменить уровень регистратора.

JavaMail 1.3 FCS RELEASE был первым выпуском, который поддерживал отладку через выходной поток. По умолчанию System.out возвращается в качестве потока отладки по умолчанию. JavaMail 1.4.6 был первым выпуском, который был адаптирован для использования java.util.logging. Предыдущее поведение все еще поддерживается для устаревших приложений.

Другие вопросы по тегам