java - SLF4J: Error al cargar la clase "org.slf4j.impl.StaticLoggerBinder"
websphere (24)
Agregué esta dependencia para resolver este problema:
https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25
Mi aplicación se implementará tanto en tcServer como en WebSphere 6.1. Esta aplicación utiliza ehCache y, por lo tanto, requiere slf4j como una dependencia. Como resultado, agregué el tarro slf4j-api.jar (1.6) a mi paquete de archivos war.
La aplicación funciona bien en tcServer, excepto por el siguiente error:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Sin embargo, cuando implemento en WebSphere obtengo un java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
.
He comprobado las rutas de clase de ambos servidores de aplicaciones y no hay otro jar slf4j.
¿Alguien tiene alguna idea de lo que puede estar pasando aquí?
Agregue las siguientes dependencias a pom para resolver este problema.
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
Como alternativa a la inclusión del frasco y las soluciones de maven puro, puede incluirlo de maven con gradle.
Ejemplo para la versión 1.7.25
// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: ''org.slf4j'', name: ''slf4j-simple'', version: ''1.7.25''
Ponga esto dentro de las dependencias de su archivo build.gradle
.
Como indica el Manual SLF4J
El Simple Logging Facade para Java (SLF4J) sirve como una fachada simple o abstracción para varios marcos de trabajo de registro, como java.util.logging, logback y log4j.
y
La advertencia desaparecerá tan pronto como agregue un enlace a su ruta de clase.
Así que debes elegir qué enlace quieres usar.
Enlace NoOp (slf4j-nop)
Encuadernación para NOP, descartando silenciosamente todo el registro.
Verifique la versión nueva en https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav
Encuadernación simple (slf4j-simple)
envía todos los eventos a System.err. Solo se imprimen los mensajes de nivel INFO y superior. Este enlace puede ser útil en el contexto de pequeñas aplicaciones.
Verifique la versión nueva en https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav
Enlaces para los marcos de registro (java.util.logging, logback, log4j)
Necesita uno de estos enlaces si va a escribir el registro en un archivo.
Consulte la descripción y las instrucciones en https://www.slf4j.org/manual.html#projectDep
Mi opinión
Recomendaría Logback porque es un sucesor del proyecto log4j .
Verifique la última versión del enlace en https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav
Obtiene la salida de la consola fuera de la caja, pero si necesita escribir registros en el archivo, simplemente coloque la configuración de FileAppender
en src/main/resources/logback.xml
o en src/test/resources/logback-test.xml
como esto:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
(Consulte la descripción detallada en el manual: https://logback.qos.ch/manual/configuration.html )
En algún momento deberíamos ver la nota de la advertencia, por ejemplo. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
.
Puede buscar la razón por la que viene esta advertencia.
La solución del problema debería ser agregar uno de los *slf4j-nop.jar
jar de *slf4j-nop.jar
, slf4j-simple.jar
, slf4j-log4j12.jar
, slf4j-jdk14.jar
o logback-classic.jar*
a la ruta de clases.
compile "org.slf4j:slf4j-api:1.6.1" compile "org.slf4j:slf4j-simple:1.6.1"
por ejemplo, agregue el código anterior a su build.gradle
o el código correspondiente a pom.xml
para el proyecto maven.
En el caso de Websphere, tiene una versión anterior de slf4j-api.jar, 1.4.x. o 1.5.x por ahí en alguna parte. El comportamiento que observa en tcServer, que es la conmutación por error a NOP, ocurre en las versiones 1.6.0 y posteriores de slf4j. Asegúrese de que está usando slf4j-api-1.6.x.jar en todas las plataformas y que no haya una versión anterior de slf4j-api en la ruta de clase.
Estaba enfrentando el mismo error. He configurado slf4j-api, slf4j-log4j12 y log4j, en mi desarrollo local. Toda la configuración estaba bien, pero la dependencia de slf4j-log4j12 que copié de mvnrepository tenía la prueba de alcance <scope>test</scope>
. Cuando quité esto, todo está bien.
Algunas veces los errores tontos nos rompen la cabeza;)
Esto es para aquellos que vinieron aquí de búsqueda de google.
Si usa maven solo agregue lo siguiente
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
O
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.4</version>
</dependency>
Estoy trabajando en un proyecto Struts2 + Spring. Por eso necesita una dependencia slf4j-api-1.7.5.jar
.
Si ejecuto el proyecto, estoy recibiendo un error como
Error al cargar la clase "org.slf4j.impl.StaticLoggerBinder"
slf4j-log4j12-1.7.5.jar
mi problema agregando el slf4j-log4j12-1.7.5.jar
.
Así que agrega este frasco en tu proyecto para resolver el problema.
La solución está indicada en su página web oficial:
Error al cargar la clase org.slf4j.impl.StaticLoggerBinder
Este mensaje de advertencia se informa cuando la clase org.slf4j.impl.StaticLoggerBinder no se pudo cargar en la memoria. Esto sucede cuando no se pudo encontrar un enlace SLF4J apropiado en la ruta de clase. Colocar uno (y solo uno) de slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar en la ruta de clases debería resolver el problema. DESDE 1.6.0 A partir de la versión 1.6 de SLF4J, en ausencia de un enlace, SLF4J usará por defecto la implementación de un registrador sin operación (NOP). Si usted es responsable de empaquetar una aplicación y no le importa el registro, al colocar slf4j-nop.jar en la ruta de clase de su aplicación se eliminará este mensaje de advertencia. Tenga en cuenta que los componentes integrados, como bibliotecas o marcos, no deben declarar una dependencia en ningún enlace SLF4J, sino que solo deben depender de slf4j-api. Cuando una biblioteca declara una dependencia en tiempo de compilación en un enlace SLF4J, impone ese enlace en el usuario final, negando así el propósito de SLF4J.
Solución: He agregado a mi proyecto el uso de maven research en intellij y he elegido el slf4j-jdk14.jar.
Lo soluciono agregando esta biblioteca: slf4j-simple-1.7.25.jar Puede descargar esto en la web oficial https://www.slf4j.org/download.html
Me enfrentaba a un problema similar con las aplicaciones Spring-boot-2 con la biblioteca Java 9.
Agregar la siguiente dependencia en mi pom.xml solucionó el problema por mí:
<dependency>
<groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
<artifactId>slf4j-maven-plugin-log</artifactId>
<version>1.0.0</version>
</dependency>
Me metí en este problema cuando recibo el siguiente error:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
cuando estaba usando slf4j-api-1.7.5.jar
en mis libs
.
A pesar de que lo intenté con todos los frascos de complemento sugeridos, como slf4j-log4j12-1.7.5.jar
, slf4j-simple-1.7.5
slf4j-log4j12-1.7.5.jar
, el mensaje de error aún persistía. El problema finalmente se resolvió cuando agregué slf4j-jdk14-1.7.5.jar
a las slf4j-jdk14-1.7.5.jar
java.
Obtenga el paquete completo de slf4j en http://www.slf4j.org/download.html
Sé que esta publicación es un poco antigua, pero en caso de que alguien más se encuentre con este problema:
Agregue slf4j-jdk14-XXXjar a su CLASSPATH (donde XXX es el número de versión, por ejemplo, slf4j-jdk14-1.7.5.jar).
HTH Peter
SLF4j es una abstracción para varios marcos de registro . Por lo tanto, aparte de tener slf4j, debe incluir cualquiera de su marco de registro como log4j o logback (etc.) en su classpath.
Para tener una idea, consulte el Primer Paso del Bebé en http://logback.qos.ch/manual/introduction.html
Según la documentación oficial del SLF4J
Error al cargar la clase org.slf4j.impl.StaticLoggerBinder
Este mensaje de advertencia se informa cuando la clase org.slf4j.impl.StaticLoggerBinder no se pudo cargar en la memoria. Esto sucede cuando no se pudo encontrar un enlace SLF4J apropiado en la ruta de clase. Colocar uno (y solo uno) de slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar o logback-classic.jar en la ruta de clases debe resolver el problema.
Simplemente agrega este jar junto con slf4j api.jar a tu classpath para hacer las cosas. La mejor de las suertes
Si está utilizando Maven para la gestión de dependencias, puede agregar la siguiente dependencia en pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.6</version>
</dependency>
Para usuarios que no son de Maven Solo descargue la biblioteca y póngala en la ruta de clase de su proyecto.
Aquí puede ver los detalles: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/
Simplemente agregue esto a su pom.xml :
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
Slf4j es una fachada para los marcos de registro subyacentes como log4j, logback, java.util.logging.
Para conectarse con los marcos subyacentes, slf4j utiliza un enlace.
- log4j - slf4j-log4j12-1.7.21.jar
- java.util.logging - slf4j-jdk14-1.7.21.jar etc.
El error anterior se lanza si se pierde el tarro de unión. Puedes descargar este jar y agregarlo a classpath.
Para la dependencia maven,
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
Esta dependencia, además de slf4j-log4j12-1.7.21.jar, arrastrará slf4j-api-1.7.21.jar así como log4j-1.2.17.jar en su proyecto
Referencia: slf4j.org/manual.html
Tuve el mismo problema con WebSphere 6.1. Como señaló Ceki, había toneladas de tarros que WebSphere estaba usando y uno de ellos estaba apuntando a una versión anterior de slf4j.
La reversión No-Op ocurre solo con slf4j -1.6+, por lo que cualquier cosa anterior a eso lanzará una excepción y detendrá su implementación.
Hay una documentación en el sitio SLf4J que resuelve esto. Seguí eso y agregué slf4j-simple-1.6.1.jar
a mi aplicación junto con slf4j-api-1.6.1.jar
que ya tenía.
Esto solucionó mi problema. Espero que ayude a otros que tienen este problema.
Unas pocas respuestas aquí recomiendan agregar la dependencia slf4j-simple a su archivo maven pom. Es posible que desee comprobar la versión más actual.
En https://mvnrepository.com/artifact/org.slf4j/slf4j-simple encontrará la última versión del enlace simple SLF4J. Elija la que mejor le convenga (aún 1.7.25 de 2017-03 es la versión estable a partir de 2018-02) e inclúyala a su pom.xml.
Versión Beta de Marzo 2018
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.8.0-beta2</version>
</dependency>
Versión estable
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
Utilizo Jena y agrego la dependencia de compañero a pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/logs.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<logger level="DEBUG" name="com.myapp"/>
</configuration>
Intento agregar slf4j-simple pero simplemente desaparece el error "SLF4J: Fallo al cargar la clase" org.slf4j.impl.StaticLoggerBinder "" pero logback-classic muestra más información detallada.
poner el archivo slf4j-log4j12-1.6.4.jar
en el classpath hará el truco.
slf4j-simple-1.6.2.jar
agregar el siguiente archivo jar en su ruta de clases: slf4j-simple-1.6.2.jar
. Si no lo tienes, descárgalo. Consulte http://www.slf4j.org/codes.html#multiple_bindings