【发布时间】:2015-01-14 09:20:58
【问题描述】:
我正在尝试使用birdge 提供的log4j-jul-2.1 将Java Util Logging 日志重定向到Log4j 2.1,但遇到了类路径问题。我在域 lib 目录中拥有所有 log4j jar,并使用了 log4j 文档中提到的以下 JVM 参数:
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
问题是log4j提供的bridge LogManager在启动时在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)
【问题讨论】: