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

В момента наблюдавам, че библиотека на трета страна (а именно javax.mail) използва java.util.logging. Версията на javaMail е 1.4.7. Искам да използвам SLF4J LoggingFramwork за свързване на JUL към връщане. slf4j api версията е: 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 може директно да пише на 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 . Предишното поведение все още се поддържа за наследени приложения.

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, може да кешира остарели стойности за debug boolean и debugOut printstream. Това може да е грешка, която виждате. - person jmehrens; 06.11.2014