Tengo una biblioteca de terceros (elasticsearch 5.x) que usa log4j2. Mi aplicación usa slf4j. ¿Existe un adaptador para la versión 2 de log4j, similar al adaptador de la versión 1 (log4j-over-slf4j)?
Solo para aclarar: no quiero usar log4j o log4j2 como la implementación real (enlace). Yo uso el inicio de sesión para eso. Así que necesito un adaptador log4j2 a slf4j, no un enlace slf4j.
También debo mencionar que encontré y probé esta biblioteca (en la versión 2.0-beta): https://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html pero me da este error:
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)EDITAR : Ok ... supongo que ayer estaba ciego y solo estaba viendo la versión beta de esta biblioteca. Por lo tanto, la respuesta es que existe un adaptador y está aquí:
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-to-slf4j https://logging.apache.org/log4j/2.0/log4j-to-slf4j/index.html
La última versión actualmente es 2.8.2
Debe incluir log4j-to-slf4j-2.x.jar y asegurarse de no incluir log4j-slf4j-impl-2.x.jar . Consulte Adaptador de Log4j a SLF4J para obtener más detalles.
El propio Log4j2 incluye una implementación de slf4j (log4j-slf4j-impl-2.x.jar)
Este es uno de los jars de la distribución Log4j2.
Actualización después de que se aclaró la pregunta:
Log4j2 incluye un puente de log4j a slf4j “. Esto es lo que necesita para enrutar el registro de Log4j2 a otra implementación de slf4j.
Es probable que el error mencionado sea un problema de versiones incompatibles, pero la pregunta no menciona los números de versión, por lo que es difícil decirlo.
De https://logging.apache.org/log4j/2.0/faq.html
Puede usar el jar del adaptador log4j-to-slf4j cuando su aplicación llama a la API de Log4j 2 y desea enrutar las llamadas de registro a una implementación de SLF4J.
El proyecto Slf4j no proporciona un puente de log4j v2 a Slf4j (no se ha mencionado en https://www.slf4j.org/legacy.html ).
Dependencias de Maven:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.11.0</version> </dependency>Dependencia de Gradle:
compile "org.apache.logging.log4j:log4j-to-slf4j:2.10.0"Tenga en cuenta que el paquete anterior tiene una dependencia transitiva en:
org.slf4j:slf4j-api:1.7.25 org.apache.logging.log4j:log4j-api:2.10.0Lista de paquetes: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-to-slf4j