gpt4 book ai didi

java - WebSphere - 无法加载 Logmanager "org.apache.logging.log4j.jul.LogManager"

转载 作者:行者123 更新时间:2023-12-02 01:32:29 40 4
gpt4 key购买 nike

我有一个运行 Web 应用程序的 WebSphere 应用程序服务器。我从 Eclipse 启动服务器。该应用程序中的主要日志记录框架是 log4j2,但也有一些使用 java.util.logging 的第三方库。我想将这些日志重定向到 log4j2,以便它使用我的过滤器、日志格式等。

因此我尝试添加 Log4j JDK Logging Adapter 。我将必要的 JAR 添加到构建路径和部署程序集中(我只缺少 log4j-jul,因为我已经将其他 log4j-jar 用于其他目的),并添加了行 -Djava .util.logging.manager=org.apache.logging.log4j.jul.LogManager 到我的 jvm.options

启动后立即出现以下异常:

Could not load Logmanager "org.apache.logging.log4j.jul.LogManager"
java.lang.ClassNotFoundException: org.apache.logging.log4j.jul.LogManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:609)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:850)
at java.lang.ClassLoader.loadClass(ClassLoader.java:829)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:329)
at java.lang.ClassLoader.loadClass(ClassLoader.java:809)
at java.util.logging.LogManager$1.run(LogManager.java:206)
at java.util.logging.LogManager$1.run(LogManager.java:192)
at java.security.AccessController.doPrivileged(AccessController.java:594)
at java.util.logging.LogManager.<clinit>(LogManager.java:192)
at java.util.logging.Logger.demandLogger(Logger.java:459)
at java.util.logging.Logger.getLogger(Logger.java:513)
at com.sun.jmx.remote.util.ClassLogger.<init>(ClassLogger.java:67)
at javax.management.NotificationBroadcasterSupport.<clinit>(NotificationBroadcasterSupport.java:376)
at com.ibm.lang.management.OperatingSystemMXBeanImpl.<init>(OperatingSystemMXBeanImpl.java:38)
at com.ibm.lang.management.ExtendedOperatingSystem.<clinit>(ExtendedOperatingSystem.java:23)
at com.ibm.lang.management.RuntimeMXBeanImpl.<clinit>(RuntimeMXBeanImpl.java:29)
at com.ibm.lang.management.ManagementUtils.getRuntimeBean(ManagementUtils.java:402)
at java.lang.management.ManagementFactory.getRuntimeMXBean(ManagementFactory.java:393)
at com.ibm.ws.logging.internal.impl.LogProviderConfigImpl.getLogHeader(LogProviderConfigImpl.java:259)
at com.ibm.ws.logging.internal.impl.LogProviderConfigImpl.<init>(LogProviderConfigImpl.java:177)
at com.ibm.ws.logging.internal.impl.LogProviderImpl.configure(LogProviderImpl.java:31)
at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.getLogProviderImpl(LauncherDelegateImpl.java:185)
at com.ibm.ws.kernel.launch.internal.LauncherDelegateImpl.launchFramework(LauncherDelegateImpl.java:91)
at com.ibm.ws.kernel.boot.internal.KernelBootstrap.go(KernelBootstrap.java:212)
at com.ibm.ws.kernel.boot.Launcher.handleActions(Launcher.java:246)
at com.ibm.ws.kernel.boot.Launcher.createPlatform(Launcher.java:121)
at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:59)
at com.ibm.ws.kernel.boot.cmdline.EnvCheck.main(EnvCheck.java:35)

我不知道这个堆栈跟踪中的大多数类,但对我来说,看起来异常很早就抛出了,可能是在设置 JVM 时,并且我的 .war 文件中打包的 jar 还不知道。

问题是,根据上面链接的 log4j 文档,我需要在第一次调用 LogManager 之前设置 LogManager 的系统属性,这确实看起来发生在堆栈跟踪的 NotificationBroadcasterSupport 中。

有没有办法让 jar 在启动的这个阶段被识别?

编辑我提出了一个后续问题here并按照那里的建议使用 Log4jBridgeHandler 而不是换出 LogManager

最佳答案

这里的问题是,不仅仅是您的应用程序使用 java.util.logging (JUL) - 服务器的核心也是如此,并尝试将 JUL 重定向到 Log4J 并使用系统属性(适用于到整个 JVM),您实际上是在尝试通过 Log4J 设置重定向服务器中的所有日志记录。服务器 messages.log 中的任何内容都将显示在您的日志记录中。

如果您仍然真的想这样做,最简单的解决方案可能是将 log4j-jul jar 放入 JVM 启动类路径中,以便 Java 系统加载程序可以看到它(您可能必须对任何依赖项执行相同的操作)和配置文件)。同样,您将覆盖所有服务器级日志记录,因此我不希望这会是受支持的配置(如果您打开支持案例,他们不会想要查看您的自定义 Log4J 格式的日志)服务器详细信息),但理论上它应该可以正常工作。

关于java - WebSphere - 无法加载 Logmanager "org.apache.logging.log4j.jul.LogManager",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827925/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com