javawebsphereslf4j

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"


My application is to be deployed on both tcServer and WebSphere 6.1. This application uses ehCache and so requires slf4j as a dependency. As a result I've added the slf4j-api.jar (1.6) jar to my war file bundle.

The application works fine in tcServer except for the following 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.

However, when I deploy in WebSphere I get a java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

Also accompanied by Failed to load class "org.slf4j.impl.StaticMDCBinder"

I've checked the classpaths of both application servers and there is no other slf4j jar.

Does anyone have any ideas what may be happening here?


Solution

  • I had the same issue with WebSphere 6.1. As Ceki pointed out, there were tons of jars that WebSphere was using and one of them was pointing to an older version of slf4j.

    The No-Op fallback happens only with slf4j 1.6+ so anything older than that will throw an exception and halts your deployment.

    There is a documentation in SLf4J site which resolves this. I followed that and added slf4j-simple-1.6.1.jar to my application along with slf4j-api-1.6.1.jar which I already had.

    If you use Maven, add the following dependencies in your pom.xml file, with ${slf4j.version} being the latest version of slf4j

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    

    This solved my issue.