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

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

здесь что-то не так?


person smart    schedule 04.11.2014    source источник


Ответы (1)


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

    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. . Предыдущее поведение по-прежнему поддерживается для устаревших приложений.

person jmehrens    schedule 04.11.2014
comment
В моей среде отладка javaMail может быть включена по умолчанию. Как отключить журнал? - person smart; 05.11.2014
comment
java.util.logging.Logger.getLogger(javax.mail).setLevel(Level.WARNING); команда не работает. Извините, я забыл подробности. Я использую org.springframework.mail.javamail.JavaMailSenderImpl, который использует javaMail под крючком для отправки электронной почты. Влияет ли это на журнал? - person smart; 06.11.2014
comment
Не должен ничего менять. Работает ли установка session.setDebug(false)? Единственное, что я заметил, это то, что MailLogger, используемый в JavaMail, может кэшировать устаревшие значения для логического значения отладки и потока печати debugOut. Это может быть ошибка, которую вы видите. - person jmehrens; 06.11.2014