Hazelcast IMDG 3.12.5 添加 log4j 依赖项以支持日志记录
Hazelcast IMDG 3.12.5 adding log4j dependency to support logging
我已经按照 hazelcast 文档使用下面的方法支持 log4j link:
https://docs.hazelcast.org/docs/latest/manual/html-single/#logging-configuration
但即使这样做之后我也无法获取 hazelcast 日志。
查询:
- 我们是否明确需要添加 log4j-1.2.17.jar 文件并将此依赖项添加到 pom.xml 文件?如是
请让我知道 hazelcast 文档中缺少什么
- 是否可以排除故障并检查错误是什么?
您共享的 Hazelcast 参考手册部分中有一条注释。它解释了事情:
If you choose to use log4j
, log4j2
, or slf4j
, you should include the proper dependencies in the classpath.
意思是,是的。如果您使用不同于 java.util.logging
的日志记录框架,那么您必须自己提供实现。
如果您没有提供正确的实现,节点将无法启动:
java -Dhazelcast.logging.type=log4j -jar \
~/.m2/repository/com/hazelcast/hazelcast/3.12.5/hazelcast-3.12.5.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at com.hazelcast.logging.Log4jFactory.createLogger(Log4jFactory.java:29)
at com.hazelcast.logging.LoggerFactorySupport.createNew(LoggerFactorySupport.java:32)
at com.hazelcast.logging.LoggerFactorySupport.createNew(LoggerFactorySupport.java:30)
at com.hazelcast.util.ConcurrencyUtil.getOrPutIfAbsent(ConcurrencyUtil.java:125)
at com.hazelcast.logging.LoggerFactorySupport.getLogger(LoggerFactorySupport.java:38)
at com.hazelcast.logging.Logger.getLogger(Logger.java:110)
at com.hazelcast.logging.Logger.getLogger(Logger.java:64)
at com.hazelcast.instance.HazelcastInstanceFactory.<clinit>(HazelcastInstanceFactory.java:67)
at com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:91)
at com.hazelcast.core.server.StartServer.main(StartServer.java:46)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 10 more
log4j
已于 5 年前弃用,存在安全漏洞,可能无法在新版本的 Java 上运行。参见 here。
将 hazelcast.logging.type
指定为 log4j
指示 Hazelcast 使用它在运行时找到的任何 Log4j,因为这使您能够选择所需的版本。
因此您的 pom 需要构建一个可执行 Jar,至少包括 Hazelcast jar 和 Log4j jar。或者,您将两者都放在运行时的类路径中。
对我来说,3.12.5 立即失败
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
如果我请求 Log4j 但未在运行时类路径上提供 Log4j jar。如果你
没有收到该消息,可能是您指定的配置未被使用。
我已经按照 hazelcast 文档使用下面的方法支持 log4j link:
https://docs.hazelcast.org/docs/latest/manual/html-single/#logging-configuration
但即使这样做之后我也无法获取 hazelcast 日志。
查询:
- 我们是否明确需要添加 log4j-1.2.17.jar 文件并将此依赖项添加到 pom.xml 文件?如是 请让我知道 hazelcast 文档中缺少什么
- 是否可以排除故障并检查错误是什么?
您共享的 Hazelcast 参考手册部分中有一条注释。它解释了事情:
If you choose to use
log4j
,log4j2
, orslf4j
, you should include the proper dependencies in the classpath.
意思是,是的。如果您使用不同于 java.util.logging
的日志记录框架,那么您必须自己提供实现。
如果您没有提供正确的实现,节点将无法启动:
java -Dhazelcast.logging.type=log4j -jar \
~/.m2/repository/com/hazelcast/hazelcast/3.12.5/hazelcast-3.12.5.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at com.hazelcast.logging.Log4jFactory.createLogger(Log4jFactory.java:29)
at com.hazelcast.logging.LoggerFactorySupport.createNew(LoggerFactorySupport.java:32)
at com.hazelcast.logging.LoggerFactorySupport.createNew(LoggerFactorySupport.java:30)
at com.hazelcast.util.ConcurrencyUtil.getOrPutIfAbsent(ConcurrencyUtil.java:125)
at com.hazelcast.logging.LoggerFactorySupport.getLogger(LoggerFactorySupport.java:38)
at com.hazelcast.logging.Logger.getLogger(Logger.java:110)
at com.hazelcast.logging.Logger.getLogger(Logger.java:64)
at com.hazelcast.instance.HazelcastInstanceFactory.<clinit>(HazelcastInstanceFactory.java:67)
at com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:91)
at com.hazelcast.core.server.StartServer.main(StartServer.java:46)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 10 more
log4j
已于 5 年前弃用,存在安全漏洞,可能无法在新版本的 Java 上运行。参见 here。
将 hazelcast.logging.type
指定为 log4j
指示 Hazelcast 使用它在运行时找到的任何 Log4j,因为这使您能够选择所需的版本。
因此您的 pom 需要构建一个可执行 Jar,至少包括 Hazelcast jar 和 Log4j jar。或者,您将两者都放在运行时的类路径中。
对我来说,3.12.5 立即失败
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
如果我请求 Log4j 但未在运行时类路径上提供 Log4j jar。如果你 没有收到该消息,可能是您指定的配置未被使用。