Java 是否有用于log4j2在slf4j上工作的适配器?

Java 是否有用于log4j2在slf4j上工作的适配器?,java,log4j,slf4j,log4j2,Java,Log4j,Slf4j,Log4j2,我有一个使用log4j2的第三方库(elasticsearch 5.x)。我的应用程序使用slf4j。是否有适用于log4j版本2的适配器,类似于版本1适配器(log4j-over-slf4j) 只是澄清一下:我不想实际使用log4j或log4j2作为实际实现(绑定)。我使用logback来实现这一点。所以我需要一个log4j2到slf4j的适配器,而不是slf4j绑定 我还应该提到,我已经找到并尝试了这个库(在2.0-beta版本中): 但它给了我一个错误: Caused by: java.l

我有一个使用log4j2的第三方库(elasticsearch 5.x)。我的应用程序使用slf4j。是否有适用于log4j版本2的适配器,类似于版本1适配器(log4j-over-slf4j)

只是澄清一下:我不想实际使用log4j或log4j2作为实际实现(绑定)。我使用logback来实现这一点。所以我需要一个log4j2到slf4j的适配器,而不是slf4j绑定

我还应该提到,我已经找到并尝试了这个库(在2.0-beta版本中): 但它给了我一个错误:

Caused by: java.lang.AbstractMethodError: org.apache.logging.slf4j.SLF4JLoggerContextFactory.getContext(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Z)Lorg/apache/logging/log4j/spi/LoggerContext;
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426)
at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:49)
at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:105)
at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:72)
at org.elasticsearch.common.component.AbstractComponent.<init>(AbstractComponent.java:37)
at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:98)
at org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:99)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:124)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:258)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:125)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:111)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:101)
原因:java.lang.AbstractMethodError:org.apache.logging.slf4j.SLF4JLoggerContextFactory.getContext(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/Object;Z)Lorg/apache/logging/log4j/spi/LoggerContext;
位于org.apache.logging.log4j.LogManager.getContext(LogManager.java:175)
位于org.apache.logging.log4j.LogManager.getLogger(LogManager.java:426)
位于org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:49)
位于org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:105)
位于org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:72)
位于org.elasticsearch.common.component.AbstractComponent.(AbstractComponent.java:37)
在org.elasticsearch.plugins.PluginsService.(PluginsService.java:98)
在org.elasticsearch.client.transport.TransportClient.newPluginService(TransportClient.java:99)上
位于org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:124)
位于org.elasticsearch.client.transport.TransportClient.(TransportClient.java:258)
在org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:125)
位于org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:111)
位于org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:101)

编辑:确定。。所以我猜我昨天只是瞎了眼,我只看到了这个库的测试版。因此,答案是有这样的适配器,它在这里:


目前最新的版本是2.8.2,我想你可以选择两个库。您可以从以下位置获取: 或 或其他。

Log4j2本身绑定了一个包(log4j-slf4j-impl-2.x.jar)

这是Log4j2中的jar之一


问题澄清后的更新:

Log4j2包括“.”这是将Log4j2日志发送到另一个slf4j实现所需的


提到的错误可能是版本不兼容的问题,但问题没有提到版本号,因此很难说。

您应该包括
log4j-to-slf4j-2.x.jar
,并确保不包括
log4j-slf4j-impl-2.x.jar
。有关更多详细信息,请参阅。

当应用程序调用log4j 2 API并且希望将日志调用路由到slf4j实现时,可以使用log4j-to-slf4j适配器jar

Slf4j项目不提供从log4j v2到Slf4j的桥梁(在中未提及)

Maven依赖项:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.11.0</version>
</dependency>
注意上述包对以下内容具有可传递依赖性:

org.slf4j:slf4j-api:1.7.25
org.apache.logging.log4j:log4j-api:2.10.0

包列表:

如果我不干净,很抱歉,但我不想使用log4j或log4j2作为我的实现(slf4j绑定)。我使用logback。我只想使用log4j2到slf4j适配器。请参阅上面的编辑。如果我不干净,很抱歉,但我不想使用log4j或log4j2作为我的实现(slf4j绑定)。我使用logback。我只需要一个log4j2到slf4j适配器。请参阅我上面的编辑。谢谢Remko,我刚刚找到了log4j到slf4j适配器的正确版本,并使其正常工作。我刚刚发布了我问题的答案,但由于我看到你现在也发布了相同的答案,我将接受你的答案,而不是我的答案。谢谢。请明确提及我的问题当您看到此错误时,您正在使用的所有相关库的副本。是的,这是一个旧版本。我使用最新版本(2.8.2)获得了它。感谢+1现代log4j v2的正确解决方案。Slf4j项目不提供桥接。它是由Apache项目本身完成的。
org.slf4j:slf4j-api:1.7.25
org.apache.logging.log4j:log4j-api:2.10.0