SLF4J with logback still prompt failed to load class "org.slf4j.impl.StaticLoggerBinder"
java, logback, maven, optaplanner, slf4j
Solution
Had the same error. I went to Maven Repository, and looked for the latest non-beta versions. Simply changing the versions worked. A working pom:
<properties>
<slf4j.version>1.7.26</slf4j.version>
<logback.version>1.2.3</logback.version>
</properties>
<dependencies>
<!-- LOGGING -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
Problem
I have a maven project which use slf4j with logback as the logger. I could see that both artifact are in my maven dependencies tree item. But whenever I tried to run my project, I keep prompted: 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. I check the link, and it was said: Placing one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem. I have add the logback-classic to my project (I'm using 1.0.9), but I keep prompted that message and my log doesn't running. Could anyone help me to solve this problem? Thanks. UPDATE: ``` <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.employee.scheduler</groupId> <artifactId>rostering</artifactId> <version>0.0.1-SNAPSHOT</version> <name>nurserostering</name> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <!-- or whatever version you use --> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!-- Needed for runExamples.sh and runExamples.bat --> <addClasspath>true</addClasspath> <classpathPrefix>../../binaries/</classpathPrefix> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <configuration> <executable>java</executable> <classpathScope>runtime</classpathScope> <arguments> <argument>-Xms256m</argument> <argument>-Xmx1024m</argument> <argument>-server</argument> <argument>-cp</argument> <classpath /> <argument>com.employee.scheduler.nurserostering.app.NurseRosteringApp</argument> </arguments> </configuration> </plugin> </plugins> </pluginManagement> </build> <dependencies> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core</artifactId> <version>6.1.0.Final</version> </dependency> <dependency> <groupId>jdom</groupId> <artifactId>jdom</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-benchmark</artifactId> <version>6.1.0.Final</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.9</version> </dependency> </dependencies> ``` and here is my logback.xml: ``` <?xml version="1.0" encoding="UTF-8"?> <!-- ~ Copyright 2013 JBoss Inc ~ ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <configuration> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- %l lowers performance --> <!--<pattern>%d [%t] %-5p %l%n %m%n</pattern>--> <pattern>%d [%t] %-5p %m%n</pattern> </encoder> </appender> <!--<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">--> <!--<file>local/log/optaplannerBenchmark.log</file>--> <!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">--> <!--<fileNamePattern>local/log/optaplannerBenchmark.%i.log.zip</fileNamePattern>--> <!--<minIndex>1</minIndex>--> <!--<maxIndex>3</maxIndex>--> <!--</rollingPolicy>--> <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">--> <!--<maxFileSize>5MB</maxFileSize>--> <!--</triggeringPolicy>--> <!--<encoder>--> <!--<!– %l lowers performance –>--> <!--<!–<pattern>%d [%t] %-5p %l%n %m%n</pattern>–>--> <!--<pattern>%d [%t] %-5p %m%n</pattern>--> <!--</encoder>--> <!--</appender>--> <logger name="org.optaplanner" level="debug"/> <logger name="com.employee.scheduler" level="debug"/> <root level="warn"> <appender-ref ref="consoleAppender" /> <!--<appender-ref ref="fileAppender" />--> </root> </configuration> ``` How I use it in my program: ``` public class SolutionBusiness { protected final transient Logger logger = LoggerFactory.getLogger(getClass()); // some other codes public void doMove(Move move) { if (solver.isSolving()) { logger.error("Not doing user move ({}) because the solver is solving.", move); return; } if (!move.isMoveDoable(guiScoreDirector)) { logger.warn("Not doing user move ({}) because it is not doable.", move); return; } logger.info("Doing user move ({}).", move); move.doMove(guiScoreDirector); } } ``` Here is my maven dependencies: