我正在尝试使用Log4j提供的log4j-jl-2.1将Java日志重定向到BURG2.1,但仍然存在类路径问题。域lib目录中有所有的log4j jars,并使用了log4j文档中提到的以下JVM参数:
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager问题是,在启动期间,log4j提供的桥AppClassLoader在Glassfish AppClassLoader中是不可用的,这会导致下面的异常。我可以通过修改服务器主类路径(由-cp参数提供)来修复这个问题,但这是不好的。是否还有其他更好的方法来实现这一目标?简单地将其放入服务器主库目录也不能作为它的工作方式,而不是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)发布于 2015-03-20 10:27:05
最后,我决定使用SLF4J及其SLF4JBridgeHandler来处理Java日志记录调用。它的主要好处是它可以在以后的某个时间点被初始化,当所有的类都被加载时,并且在所有需要的静态初始化之后。
SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();我还切换到Logback作为后端,因为对于这个解决方案,Log4j遇到了禁用JUL记录器的性能问题。
https://stackoverflow.com/questions/27939399
复制相似问题