2015-01-14 2 views
0

Я пытаюсь перенаправить журналы журналов Java Util Loglog в Log4j 2.1 с помощью birdge, предоставленного log4j-jul-2.1, но застрял в проблемах с classpath. У меня есть все log4j банки в доменах Lib каталога и используется следующий параметр виртуальной машины Java, как указано в log4j документации:log4j-jul-2.1 и Glasfish 3.1.2 использование

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager 

Проблема заключается в том, что мост LogManager обеспечивается log4j не доступен в Glassfish AppClassLoader во время запуска, и это вызывает исключение ниже. Я могу исправить это, изменив основной путь к серверу (предоставленный аргументом -cp), но это плохо. Есть ли какой-нибудь другой/лучший способ добиться этого? Просто размещение его в главной директории lib сервера также не работает, поскольку его снова не AppClassLoader.

Could not load Logmanager "org.apache.logging.log4j.jul.LogManager" 
    java.lang.ClassNotFoundException: org.apache.logging.log4j.jul.LogManager 
      at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
      at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
      at java.util.logging.LogManager$1.run(LogManager.java:167) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at java.util.logging.LogManager.<clinit>(LogManager.java:157) 
      at java.util.logging.Logger.getLogger(Logger.java:287) 
      at com.sun.enterprise.glassfish.bootstrap.ASMainHelper.<clinit>(ASMainHelper.java:67) 
      at com.sun.enterprise.glassfish.bootstrap.ASMain.main(ASMain.java:54) 

ответ

0

Наконец-то я решил использовать SLF4J и его SLF4JBridgeHandler для обработки вызовов Java Util Logging. Главное преимущество этого заключается в том, что его можно инициализировать в какой-то более поздний момент, когда загружаются все классы и после всех необходимых статических инициализаций.

SLF4JBridgeHandler.removeHandlersForRootLogger(); 
    SLF4JBridgeHandler.install(); 

Я также перешел на Logback в качестве внутреннего интерфейса, как с этим решением Log4j сталкивается с проблемами производительности для отключения регистраторов Юль.

Смежные вопросы