2012-09-17 5 views
30

SLF4J에 대한 의존성이 있습니다. 이 오류가 무엇입니까 :SLF4J : "org.slf4j.impl.StaticLoggerBinder"클래스를로드하지 못했습니다. Maven 프로젝트에서

여기
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. 

내 받는다는 항목입니다 :

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.6.6</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.6</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 

문제가가?


는 편집 : log4j에 의존하지 않고 나는 다음과 같은 예외를

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) 
    at org.apache.bval.jsr303.ConfigurationImpl.<clinit>(ConfigurationImpl.java:50) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at org.apache.bval.jsr303.ApacheValidationProvider.createGenericConfiguration(ApacheValidationProvider.java:66) 
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:173) 
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:50) 
    at com.daimler.zv9.basic.entity.AbstractEntity.<clinit>(AbstractEntity.java:73) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:195) 
    at java.lang.Class.forNameImpl(Native Method) 
    at java.lang.Class.forName(Class.java:168) 

EDIT2를 얻을 : 그것은 내가

[INFO] com.myCompany.abc:ABC_Document:ejb:0.0.1-SNAPSHOT 
[INFO] +- com.myCompany.abc:ABC_Basic:jar:0.0.1-SNAPSHOT:compile 
[INFO] +- com.myCompany.iap:javax.j2ee:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:logging:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:util:jar:5.0.0:provided 
[INFO] +- junit:junit:jar:4.8.2:test 
[INFO] +- javax.servlet:jstl:jar:1.2:provided 
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.6:compile 
[INFO] \- org.mockito:mockito-all:jar:1.9.0:test 
+0

@Ceki? – Kayser

+0

이 독립 실행 형 프로그램이거나 일부 서버에 배포 되었습니까? – basiljames

+0

@basiljames mvn openjpa : sql 명령으로 오류가 발생합니다. 어디에도 설치되지 않았습니다. – Kayser

답변

33

Eclipse를 개발 환경으로 사용한다고 가정합니다.

Eclipse Juno, Indigo 및 Kepler가 번들로 제공되는 Maven 버전 (m2e)을 사용할 때 SLF4J 메시지를 표시하지 않습니다. "org.slf4j.impl.StaticLoggerBinder"클래스를로드하지 못했습니다. 이 동작은 m2e 버전 1.1.0.20120530-0009부터 발생합니다.

비록 이것은 오류로 표시되며 로그는 정상적으로 저장됩니다. 강조 표시된 오류는이 버그의 수정 사항이있을 때까지 계속 나타납니다. m2e support site에서 자세한 내용.

현재 사용 가능한 솔루션은 Eclipse의 번들 버전이 아닌 외부 maven 버전을 사용하는 것입니다. 이 솔루션에 대한 자세한 내용과이 버그에 대한 자세한 내용은 아래의 질문에서 볼 수 있습니다.

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

+0

외부 Maven 버전을 사용할 수 없다면, 로컬 Maven 저장소의 내용을 지우는 것이 좋습니다. – Kowlown

15

제거를 얻을 예 받는다는 트리입니다

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 

slf4j-log4j12 는 다른 log4j에 종속성을 추가 할 필요가 slf4j에 대한 해달라고 바인딩의 log4j입니다. 추가

log4j.properties에 log4j 구성을 제공하고 클래스 경로에 추가합니다. 이 샘플 구성

here은 나 때문에 그것을 필요로하는 일부 종속성이 SLF4J를 구성하는 경우가

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.6.1</version> 
</dependency> 

에 바인딩을 변경할 수 있습니다.

+0

나는 그것을 제거했다. 나는이 예외 '를 얻고 것은 SLF4J LoggerFactory 를 초기화하지 못했습니다보고 예외 : java.lang.NoClassDefFoundError가 : org.slf4j.impl.StaticLoggerBinder org.slf4j.LoggerFactory.bind (LoggerFactory.java:121)에서 \t \t에서 조직 .slf4j.LoggerFactory.performInitialization (LoggerFactory.java:111) \t at org.slf4j.LoggerFactory.getILoggerFactory (LoggerFactory.java:268) ' – Kayser

+0

하나의 유사한 [게시물] (http://stackoverflow.com/questions/7421612/) slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder) – basiljames

+0

slf4j-log4j가 의존성으로 선언 될 때 log4j를 종속성으로 추가하면 은 불필요하지만 피해를 입히지 않아야합니다. 또한 log4j.properties는 묻는 질문과 관련이 없습니다. – Ceki

2

당신이 언급 메시지는 매우 분명하다

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. 

SLF4J API는 바인딩을 발견하고, NOP 구현 기본값하기로 결정 없습니다. 귀하의 경우에 slf4j-log4j12.jar LoggerFactory 클래스가 메모리에로드되었을 때 아무 래도 보이지 않았습니다. 이는 분명히 이상한 것입니다. "mvn dependency : tree"는 무엇을 말합니까?

다양한 종속성 선언은 여기에서 직접 발생하지 않을 수도 있습니다. slf4j-api.jar의 1.6 이전 버전이 사용자 모르게 배포되고 있다고 생각됩니다.

+0

다음과 같은 종속성이 있습니다 : tree tells : [정보] [정보] --- maven-dependency-plugin : 2.5.1 : tree (default-cli) @ GEM_Web --- [정보] com.mycompany.proj : 정보 : 내 정보 : 전쟁 : 0.0.1 스냅 샷 ... [정보] + - javax.servlet : jstl : jar : 1.2 : 제공됨 [정보] + - org.slf4j : slf4j-api : 병 : 1.6.6 : 컴파일 [정보] + - org.slf4j : slf4j - 간단한 : 용기 : 1.6.6 : 컴파일 [정보] \ - org.mockito : mockito-all : jar : 1.9.0 : test' – Kayser

+0

위의 내용은 그리 좋지 않습니다. 읽기 쉬운. IMO, 질문 부분으로 이동해야합니다. – Ceki

+0

힌트를 보내 주셔서 감사합니다. – Kayser

6

나는 인 IntelliJ이에 달려 내 치어에 다음을 추가하여 고정 : 당신은 아이디어가 어쩌면

<!-- logging dependencies --> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback.version}</version> 
     <exclusions> 
      <exclusion> 
       <!-- Defined below --> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

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

더 나은 해결 방법은'slf4j-api'의 버전을 내려주는'dependencyManagement' 요소를 사용하는 것입니다. –

+0

스프링 부트 15를 사용하고 있습니다.이 솔루션은 저에게 효과적이었습니다 –

관련 문제