Есть ли адаптер для log4j2, чтобы работать над slf4j?


У меня есть сторонняя библиотека (elasticsearch 5.x) который использует log4j2. Существует ли адаптер для версии 2 log4j, аналогичный адаптеру версии 1 (log4j-over-slf4j)?

Просто поясню: я не хочу на самом деле использовать log4j или log4j2 в качестве фактической реализации (привязки). Для этого я использую logback. Поэтому мне нужен адаптер log4j2 к slf4j, а не привязка slf4j.

Я также должен упомянуть, что я нашел и попробовал эту библиотеку (в 2.0-beta версия): 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-slf4j https://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html

Последняя версия в настоящее время-2.8.2

4 6

4 ответа:

Log4j2 сам связывает реализациюslf4j (log4j-slf4j-impl-2.x.jar)

Это одна из банок в распределении Log4j2 .


Обновление после уточнения вопроса:

Log4j2 включает в себя мостlog4j-to-slf4j ". Это то, что вам нужно для маршрутизации log4j2 logging в другую реализацию slf4j.

Упомянутая ошибка, вероятно, является проблемой несовместимых версий, но в вопросе не упоминаются номера версий, поэтому трудно сказать.

Вы должны включить log4j-to-slf4j-2.x.jar и убедитесь, что не включают log4j-slf4j-impl-2.x.jar. Дополнительные сведения см. в Разделе Log4j to SLF4J Adapter.

Я думаю, что вы можете выбрать две библиотеки. Вы можете взять его из: http://www.java2s.com/Code/Jar/l/Downloadlog4jjar.htm или https://logging.apache.org/log4j/2.0/download.html или другое.

Из https://logging.apache.org/log4j/2.0/faq.html

Вы можете использовать jar-адаптер log4j-to-slf4j, когда ваше приложение вызывает log4j 2 API, и вы хотите перенаправить вызовы журнала к реализации SLF4J.

Введите описание изображения здесь

Проект Slf4j не обеспечивает мост от log4j v2 к Slf4j (он не был упомянут в 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>

Грэдл зависимость:

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