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

h5qlskok  于 2022-11-06  发布在  其他
关注(0)|答案(3)|浏览(174)

我有一个使用log4j 2的第三方库(elasticsearch 5.x)。我的应用程序使用slf 4j。是否有适用于log4j版本2的适配器,类似于版本1的适配器(log4j-over-slf 4j)?
只是澄清一下:我不想使用log4j或log4j 2作为实际的实现(绑定),我使用logback来实现,所以我需要一个log4j 2到slf 4j的适配器,而不是一个slf 4j绑定。
我还应该提到,我已经找到并尝试了这个库(在2. 0-测试版中):https://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html,但它显示了以下错误:

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)

EDIT:好的..我想我昨天只是瞎了眼,我只看到了这个库的测试版。因此,答案是有这样的适配器,它在这里:

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-to-slf4jhttps://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html
目前最新版本为2.8.2

ssm49v7z

ssm49v7z1#

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

siv3szwd

siv3szwd2#

Log4j 2本身捆绑了一个slf4j implementation(log4j-slf4j-impl-2.x.jar)
这是Log4j 2 distribution中的一个jar。
澄清问题后的更新:
Log4j 2包括一个log4j-to-slf4j bridge“。这是将Log4j 2日志记录路由到另一个slf 4j实现所需的。
提到的错误可能是版本不兼容的问题,但问题没有提到版本号,所以很难说。

7ajki6be

7ajki6be3#

https://logging.apache.org/log4j/2.0/faq.html开始
当您的应用程序调用Log4j 2 API,并且您希望将日志记录调用路由到SLF 4J实现时,可以使用log4j-to-slf 4j适配器jar。

Slf 4j项目不提供从log4j v2到Slf 4j的桥接(在https://www.slf4j.org/legacy.html中未提及)。
Maven依赖项:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.11.0</version>
</dependency>

Gradle依赖关系:

compile "org.apache.logging.log4j:log4j-to-slf4j:2.10.0"

注意上述程序包具有可传递依赖项:

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

软件包列表:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-to-slf4j

相关问题