- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个运行 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/
我正在尝试使用具有自定义配置的 JUL 记录器,以便特殊处理程序负责不同的日志记录级别。我希望将严重问题(例如连接到数据库或读取属性时失败)记录到本地文件中,警告应由我的自定义处理程序写入数据库,其他
我希望我的记录器在每条消息上添加一个文本字符串前缀,因为我需要确定类的哪个实例记录了该消息。我怎样才能做到这一点? 我不想记住在每个日志记录方法调用上添加前缀,所以我正在寻找一个更像是直接插入的解决方
我正在尝试使用 JUL 适配器 将 Java Util Logging 委托(delegate)给 Log4j2。更准确地说,任何使用 JUL 生成日志的第三方库都应该委托(delegate)给 Lo
我为 JUL 创建了一个新的日志处理程序,它扩展了 java.util.logging.Handler。 有没有什么标准化的方法可以让我对 LogRecord(比如 log4j 中的 LogLog)处
在 JBoss 中将 Sentry 与 JUL 集成时,我收到一条错误消息: The configuration file in 'logging.properties' appears to be
我觉得这应该更容易,或者我错过了一些明显的东西。 我正在尝试将我们的自定义 JUL 日志记录库与 Jetty 一起使用。无论我将自定义记录器的 JAR 文件放在哪里,都找不到它。我已经尝试过常见的嫌疑
我有一个命令行工具( frontend.java ),使用 args4j 选项类( Options.java )和 JUL 配置类( LogConfig.java )。因为在我的实际应用程序中,我需要
我正在使用 logback 和 JUL 到 SLF4J 的桥接器(后者用于捕获使用 Java 日志记录的第三方库日志语句)。 我从第三方获取日志输出,但日志记录模式不是我为 Logback 指定的模式
我正在修复在 tomcat 7 上运行的遗留 JSF 应用程序。 用户访问BB.java package beans; import java.util.logging.Level; import j
我们的应用程序在 WildFly 中运行,但我们使用自定义日志记录,因此在 jboss-deployment-struct.xml 中有以下几行: 我们使用 SLF4j 和 Logback
使用 Java 1.8 和 Log4J 2.4 JUL 适配器(log4j-jul-2.4.jar、log4j-core-2.4.jar、log4j-api-2.4.jar) public class
我正在使用使用 java.util.logging 的第三方库 ( Sphinx )。我一直在尝试几种方法将其日志路由到 slf4j。我希望使用的日志库是Log4j2,其配置如下: Configura
我目前观察到第 3 方库(即 javax.mail )正在使用 java.util.logging。javaMail的版本是1.4.7。我想使用 SLF4J LoggingFramwork 将 JUL
这个问题在这里已经有了答案: 2 digit years using strptime() is not able to parse birthdays very well (3 个答案) 关闭 9
我需要将 Jersey 请求/响应日志重定向到我的 log4j2。 我通过在我的 ApplicationJAXRS extends Application 上使用此代码启用了 Jersey 日志记录:
我正在将 API 从 JUL(Java Util Logging)迁移到 Log4j 2,因此我必须保持公开 JUL 级别的现有方法的兼容性。 例如: log(java.util.logging.Le
AppEngine 网络控制台允许过滤不同的日志级别: 调试 信息 警告 错误 关键 AppEngine 使用 java.utils.logging (JUL),但 JUL 定义了与 Web 控制台中
我创建了一个写入控制台的 appender 插件。它使用以下实现来登录到控制台。 try { final byte[] bytes = getLayout().toByteArray(
在第 3 方 jar 记录器中存在此代码。'Logger.getLogger("net.java.ao").log(Level.INFO, sql.toString());' 如何从我的程序中禁用此记
我有一个在 tomcat 上运行的应用程序。应用程序应用它自己的日志记录格式,然后 tomcat 应用它自己的格式。 这是我在应用程序中的 logging.properties: handlers =
我是一名优秀的程序员,十分优秀!