2015-02-26 13 views
6

Ho un progetto di maven che utilizza slf4j con logback come logger. Ho potuto vedere che entrambi gli artefatti si trovano nel mio albero dell'albero delle dipendenze. Ma ogni volta che ho provato a fare funzionare il mio progetto, continuo spinto:SLF4J con prompt di conferma non è riuscito a caricare la classe "org.slf4j.impl.StaticLoggerBinder"

SLF4J: Impossibile caricare la classe "org.slf4j.impl.StaticLoggerBinder". SLF4J: implementazione del logger per impostazione predefinita senza operazione (NOP) SLF4J: Vedere http://www.slf4j.org/codes.html#StaticLoggerBinder per ulteriori dettagli.

ho controllare il link, e si diceva:

Posizionamento uno (e uno solo) di slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j- jdk14.jar o logback-classic.jar sul percorso della classe dovrebbero risolvere il problema.

devo aggiungere il logback-classico al mio progetto (sto usando 1.0.9), ma continuo spinto quel messaggio e il mio registro non in esecuzione.

Qualcuno potrebbe aiutarmi a risolvere questo problema? Grazie.

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> 

e qui è la mia 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>--> 
     <!--&lt;!&ndash; %l lowers performance &ndash;&gt;--> 
     <!--&lt;!&ndash;<pattern>%d [%t] %-5p %l%n %m%n</pattern>&ndash;&gt;--> 
     <!--<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> 

Come lo uso nel mio programma:

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); 
    } 
} 

Qui è la mia dipendenze Maven:

maven dependencies

+0

Immagino che tu abbia già visto http://stackoverflow.com/questions/11916706/slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder-error –

+0

È logback-core anche sul percorso della tua classe ? Puoi modificare il tuo post per contenere la tua esatta chiamata Java? – durron597

+0

@GrzegorzOledzki: sì, l'ho visto e lo provo, ma non risolve il mio problema. Il mio problema è diverso, non è stato l'errore Eclipse, perché il log non era in realtà in esecuzione. –

risposta

0

si può avere solo che il messaggio di errore specifico se logback-classico o logback-core non è nel classpath. Come sono nelle tue dipendenze (vedi pom) e nel tuo classpath eclipse (vedi screenshot), questo è strano.

Innanzitutto, controlla se ricevi ancora lo stesso messaggio di errore (forse hai risolto il problema e ora hai ricevuto un messaggio di errore diverso).

In secondo luogo, in eclissi, aprire il tipo "StaticLoggerBinder" e inserire qui un punto di interruzione. Metti anche un punto di interruzione in "LoggerFactory.getLogger". Quindi fai il debug.

+0

Per prima cosa, ricevo sempre lo stesso messaggio di errore ogni volta che ho provato a eseguire le app. In secondo luogo, ho provato a inserire un punto di interruzione e non è intervenuta quando eseguo le app. Qualche suggerimento che altro dovrei fare? Sono rimasto bloccato qui per giorni. Grazie –

+0

No, non ne ho idea. –