2015-02-26 2 views
6

У меня есть проект maven, который использует slf4j с логином в качестве регистратора. Я мог видеть, что оба артефакта находятся в моем элементе дерева зависимостей maven. Но всякий раз, когда я пытался запустить свой проект, я всегда предлагал:SLF4J с запросом журнала еще не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder»

SLF4J: Не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder». SLF4J: Реализация регистратора бездействия (NOP) SLF4J: См. http://www.slf4j.org/codes.html#StaticLoggerBinder для получения дополнительной информации.

проверить ссылку, и это было сказано:

Размещение один (и только один) из SLF4J-nop.jar, SLF4J-simple.jar, SLF4J-log4j12.jar, slf4j- jdk14.jar или logback-classic.jar в пути класса должны решить проблему.

Я добавляю классический журнал в мой проект (я использую 1.0.9), но я продолжаю предлагать это сообщение, и мой журнал не работает.

Может ли кто-нибудь помочь мне решить эту проблему? Спасибо.

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> 

и вот мой 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> 

Как я использую его в своей программе:

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

Вот мой maven:

maven dependencies

+0

Я думаю, вы уже видели http://stackoverflow.com/questions/11916706/slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder-error –

+0

Является ли logback-core на вашем пути к классу слишком ? Можете ли вы отредактировать сообщение, чтобы содержать ваш точный вызов Java? – durron597

+0

@GrzegorzOledzki: да, я это видел и попробовал, но это не решает мою проблему. Моя проблема другая, это не ошибка затмения, потому что журнал фактически не работает. –

ответ

0

Вы можете иметь только что конкретное сообщение об ошибке, если Logback-классический или Logback-ядро не на пути к классам. Поскольку они находятся в ваших зависимостях maven (см. Pom) и в вашем пути к классу eclipse (см. Снимок экрана), это странно.

Во-первых, убедитесь, что вы все еще получаете то же сообщение об ошибке (возможно, вы исправили эту проблему и получили другое сообщение об ошибке).

Во-вторых, в затмении откройте тип «StaticLoggerBinder» и установите там точку останова. Также установите точку останова в «LoggerFactory.getLogger». Затем отлаживаем.

+0

Во-первых, я все равно получаю такое же сообщение об ошибке, когда пытался запустить приложения. Во-вторых, я попытался установить там точку останова, и он не наступил, когда я запускаю приложения. Любое предложение, что мне еще нужно делать? Застрял здесь целыми днями. Спасибо –

+0

Нет, я понятия не имею. –

Смежные вопросы