Programming

SLF4J :“org.slf4j.impl.StaticLoggerBinder”클래스를로드하지 못했습니다.

procodes 2020. 2. 10. 22:33
반응형

SLF4J :“org.slf4j.impl.StaticLoggerBinder”클래스를로드하지 못했습니다.


내 응용 프로그램은 tcServer와 WebSphere 6.1 모두에 배포됩니다. 이 응용 프로그램은 ehCache를 사용하므로 slf4j가 종속성으로 필요합니다. 결과적으로 slf4j-api.jar (1.6) jar을 war 파일 번들에 추가했습니다.

응용 프로그램은 다음 오류를 제외하고 tcServer에서 제대로 작동합니다.

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.

그러나 WebSphere에 배포하면을 얻습니다 java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

두 응용 프로그램 서버의 클래스 경로를 확인했으며 다른 slf4j jar이 없습니다.

누구든지 여기서 무슨 일이 일어나고 있는지 아이디어가 있습니까?


WebSphere 6.1과 동일한 문제가있었습니다. Ceki가 지적했듯이 WebSphere가 사용하고있는 많은 항아리가 있었고 그중 하나가 slf4j의 이전 버전을 가리키고있었습니다.

No-Op 롤백은 slf4j -1.6+에서만 발생하므로 그보다 오래된 것은 예외가 발생하고 배포가 중단됩니다.

SLf4J 사이트 에이 문제를 해결 하는 설명서가 있습니다 . 나는 그것을 따르고 이미 가지고 있던 slf4j-simple-1.6.1.jar신청서에 추가 했습니다 slf4j-api-1.6.1.jar.

이것은 내 문제를 해결했습니다. 이 문제가있는 다른 사람들에게 도움이되기를 바랍니다.


이것은 구글 검색에서 온 사람들을위한 것입니다.

maven을 사용하는 경우 다음을 추가하십시오.

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

또는

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>

클래스 경로에 다음 jar 파일을 추가해야합니다 slf4j-simple-1.6.2.jar.. 없는 경우 다운로드하십시오. http://www.slf4j.org/codes.html#multiple_bindings참조하십시오


이것을 pom.xml에 추가하십시오 .

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

여기에 약간의 답변이 slf4j-simple 종속을 maven pom 파일에 추가하는 것이 좋습니다. 최신 버전을 확인하고 싶을 수도 있습니다.

에서 https://mvnrepository.com/artifact/org.slf4j/slf4j-simple 당신은 바인딩 SLF4J의 간단한의 최신 버전을 찾을 수 있습니다. 가장 적합한 것을 선택하십시오 (2019-02의 1.7.26은 2019-07 기준 안정 버전 임). pom.xml에 포함하십시오.

귀하의 편의를 위해 일부 종속성이 여기에 표시되어 있지만 읽을 때 최신 상태가 아닐 수도 있습니다!

2019-06의 알파 버전

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>2.0.0-alpha0</version>
</dependency>

2019 년 2 월 베타 버전

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta4</version>
</dependency>

안정적인 버전 2019-08

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>1.7.28</version>
   <scope>test</scope>
</dependency>

아래 주석 덕분에 스코프 테스트 부분을 제거했습니다.


나는 같은 오류에 직면했다. 로컬 개발에서 slf4j-api, slf4j-log4j12 및 log4j를 구성했습니다. 모든 구성은 괜찮 았지만 mvnrepository에서 복사 한 slf4j-log4j12 종속성에는 테스트 범위가 <scope>test</scope>있습니다. 이것을 제거하면 모든 것이 정상입니다.

때때로 어리석은 실수는 우리의 머리를 부러 뜨립니다.)


때때로 우리는 예를 들어 경고의 메모를보아야합니다. SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

이 경고가 발생하는 이유를 검색 할 수 있습니다.
에서 jar 중 하나를 추가 *slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar또는 logback-classic.jar*클래스 패스에하면 문제를 해결해야한다.

compile "org.slf4j:slf4j-api:1.6.1" compile "org.slf4j:slf4j-simple:1.6.1"

예를 들어 위 코드를 maven 프로젝트의 build.gradle코드 또는 해당 코드에 추가하십시오 pom.xml.


slf4j-log4j12-1.6.4.jar클래스 경로 에 파일 넣으면 트릭을 수행합니다.


maven을 사용하여 종속성 관리에 pom.xml에 다음 종속성을 추가 할 수 있습니다

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.6</version>
</dependency>

메이븐 사용자가 아닌 경우 라이브러리를 다운로드하여 프로젝트 클래스 경로에 넣으십시오.

여기에서 세부 사항을 볼 수 있습니다. http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/


SLF4j는 다양한 로깅 프레임 워크에 대한 추상화 입니다 . 따라서 slf4j를 사용하는 것 외에도 클래스 경로에 log4j 또는 logback 등의 로깅 프레임 워크를 포함해야합니다.
아이디어를 얻으려면 http://logback.qos.ch/manual/introduction.html첫 번째 아기 단계참조하십시오


Slf4j는 log4j, logback, java.util.logging과 같은 기본 로깅 프레임 워크의 외관입니다.

기본 프레임 워크와 연결하기 위해 slf4j는 바인딩을 사용합니다.

  • log4j-slf4j-log4j12-1.7.21.jar
  • java.util.logging-slf4j-jdk14-1.7.21.jar 등

바인딩 항아리를 놓치면 위의 오류가 발생합니다. 이 jar 파일을 다운로드하여 클래스 경로에 추가 할 수 있습니다.

maven 의존성을 위해

<dependency> 
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

slf4j-log4j12-1.7.21.jar 외에도이 종속성은 slf4j-api-1.7.21.jar 및 log4j-1.2.17.jar을 프로젝트로 가져옵니다.

참조 : http://www.slf4j.org/manual.html


Java 9 라이브러리가있는 Spring-boot-2 응용 프로그램과 비슷한 문제에 직면했습니다.

내 pom.xml에 다음과 같은 종속성을 추가하면 문제가 해결되었습니다.

    <dependency>
        <groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
        <artifactId>slf4j-maven-plugin-log</artifactId>
        <version>1.0.0</version>
    </dependency>

Websphere의 경우 이전 버전의 slf4j-api.jar, 1.4.x가 있습니다. 또는 1.5.x 어딘가에 누워 있습니다. tcServer에서 관찰되는 동작, 즉 NOP 로의 페일 오버는 slf4j 버전 1.6.0 이상에서 발생합니다. 모든 플랫폼에서 slf4j-api-1.6.x.jar을 사용하고 클래스 경로에 이전 버전의 slf4j-api가 없는지 확인하십시오.


다음 오류가 발생하면이 문제가 발생했습니다.

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-1.7.5.jar에서 사용할 때 libs.

Inspite 나는 전체 제안 보수 항아리와 시도, 같은 slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5오류 메시지가 여전히 지속되었다. slf4j-jdk14-1.7.5.jar자바 라이브러리에 추가하면 문제가 마침내 해결되었습니다 .

http://www.slf4j.org/download.html 에서 전체 slf4j 패키지를 다운로드하십시오.


이 문제를 해결하려면 다음 종속성을 pom에 추가하십시오.

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
  <scope>test</scope>
</dependency>

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

Struts2 + Spring 프로젝트에서 일하고 있습니다. 따라서 의존성이 필요합니다 slf4j-api-1.7.5.jar.

프로젝트를 실행하면 다음과 같은 오류가 발생합니다.

"org.slf4j.impl.StaticLoggerBinder"클래스를로드하지 못했습니다.

을 추가하여 문제를 해결했습니다 slf4j-log4j12-1.7.5.jar.

따라서이 항아리를 프로젝트에 추가하여 문제를 해결하십시오.


SLF4J 수동 상태

SLF4J (Simple Logging Facade for Java)는 java.util.logging, logback 및 log4j와 같은 다양한 로깅 프레임 워크의 단순한 외관 또는 추상화 역할을합니다.

클래스 경로에 바인딩을 추가하면 경고가 사라집니다.

따라서 사용하려는 바인딩을 선택해야합니다.

NoOp 바인딩 (slf4j-nop)

NOP를 바인딩하여 모든 로깅을 자동으로 버립니다.

https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav 에서 최신 버전 확인

간단한 바인딩 (slf4j-simple)

모든 이벤트를 System.err에 출력합니다. 정보가 INFO 이상인 메시지 만 인쇄됩니다. 이 바인딩은 소규모 응용 프로그램 환경에서 유용 할 수 있습니다.

https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav 에서 최신 버전을 확인 하십시오.

로깅 프레임 워크의 바인딩 (java.util.logging, logback, log4j)

로그를 파일에 쓰려면 이러한 바인딩 중 하나가 필요합니다.

https://www.slf4j.org/manual.html#projectDep 에서 설명 및 지침을 참조하십시오.


내 의견

내가 추천 할 것입니다 Logback를 가의 후계자이기 때문에 의 log4j 프로젝트.

https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav 에서 최신 버전의 바인딩을 확인 하십시오.

콘솔 출력을 즉시 얻을 수 있지만 파일에 로그를 작성 해야하는 경우 다음 과 같이 또는 FileAppender구성을 지정하십시오 .src/main/resources/logback.xmlsrc/test/resources/logback-test.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logs.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger level="DEBUG" name="com.myapp"/>
</configuration>

(http://logback.qos.ch/manual/configuration.html 매뉴얼의 자세한 설명 참조 )


이 문제를 해결하기 위해이 종속성을 추가했습니다.

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25

jar 포함 및 순수한 maven 솔루션의 대안으로 maven 에서 gradle과 함께 포함 할 수 있습니다 .

버전의 예 1.7.25

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

이것을 build.gradle파일 의 종속성 안에 넣으십시오 .


SLF4J 공식 문서 에 따르면

org.slf4j.impl.StaticLoggerBinder 클래스를로드하지 못했습니다.

이 경고 메시지는 org.slf4j.impl.StaticLoggerBinder 클래스를 메모리에로드 할 수 없을 때보고됩니다. 클래스 경로에서 적절한 SLF4J 바인딩을 찾을 수 없을 때 발생합니다. 클래스 경로에 slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar 또는 logback-classic.jar 중 하나만 배치 하면 문제가 해결됩니다.

간단하게 추가 할 이 항아리 일을 완수하기 위해 클래스 패스에 SLF4J의 api.jar을 함께. 행운을 빌어 요


이 라이브러리를 추가하여 해결합니다 : slf4j-simple-1.7.25.jar 공식 웹에서 다운로드 할 수 있습니다 https://www.slf4j.org/download.html


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

위에서 언급 한 종속성을 pom.xml 파일에 넣습니다.


나는이 게시물이 조금 오래되었다는 것을 알고 있지만 다른 사람 이이 문제에 부딪 칠 경우를 대비하여

slf4j-jdk14-XXXjar를 CLASSPATH에 추가하십시오 (여기서 XXX는 버전 번호입니다 (예 : slf4j-jdk14-1.7.5.jar)).

피터 HTH


Jena를 사용하고 pom.xml에 동료 의존성을 추가합니다.

<dependency> 
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.0.13</version>
</dependency>

slf4j-simple을 추가하려고하지만 "SLF4J :"org.slf4j.impl.StaticLoggerBinder 클래스를로드하지 못했습니다 "오류가 사라지지만 logback-classic은 더 자세한 정보를 표시합니다.

공식 문서


해결책은 공식 웹 사이트에 표시되어 있습니다.

org.slf4j.impl.StaticLoggerBinder 클래스를로드하지 못했습니다.

이 경고 메시지는 org.slf4j.impl.StaticLoggerBinder 클래스를 메모리에로드 할 수 없을 때보고됩니다. 클래스 경로에서 적절한 SLF4J 바인딩을 찾을 수 없을 때 발생합니다. 클래스 경로에 slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar 또는 logback-classic.jar 중 하나만 배치하면 문제가 해결됩니다. SINCE 1.6.0 SLF4J 버전 1.6부터 바인딩이없는 경우 SLF4J는 기본적으로 NOP (No-operation) 로거 구현으로 설정됩니다. 응용 프로그램 패키징을 담당하고 로깅에 신경 쓰지 않으면 응용 프로그램의 클래스 경로에 slf4j-nop.jar을 배치하면이 경고 메시지가 제거됩니다. 라이브러리 또는 프레임 워크와 같은 임베디드 구성 요소는 SLF4J 바인딩에 대한 종속성을 선언하지 말고 slf4j-api에만 의존해야합니다.

해결책 : intellij에 대한 maven 연구를 사용하여 프로젝트에 추가했으며 slf4j-jdk14.jar을 선택했습니다.


@thangaraj 에서 언급했듯이 문제가 <scope>test</scope>원인 일 수도 있습니다 (일부 경우 <scope>provided</scope>) .

설명서에 따르면 :

이 범위는 응용 프로그램을 정상적으로 사용하는 데 종속성이 필요하지 않으며 테스트 컴파일 및 실행 단계에서만 사용할 수 있음을 나타냅니다. 테스트 종속성은 전 이적이지 않으며 테스트 및 실행 클래스 경로에만 존재합니다.

따라서 테스트 목적으로 의존성 이 필요하지 않은 경우 대신 ( mvnrepository 에서 볼 수있는 ) 대신 사용할 수 있습니다 .

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.24</version>
    <scope>test</scope>
</dependency>

범위가없는 경우 (기본적으로 다른 범위가 제공되지 않으면 컴파일 범위가 됨) :

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
</dependency>

이것은 다음과 같습니다 :

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
 <dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
   <scope>compile</scope>
 </dependency>

여기 5 센트가 있습니다 ...

테스트를 실행하는 동안 동일한 문제가 발생했습니다. 테스트 런타임 전용 구현을 추가하여 수정했습니다. 이 프로젝트에 gradle을 사용하고 있습니다.

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

testRuntimeOnly 그룹 : 'ch.qos.logback', 이름 : 'logback-classic', 버전 : '1.2.3'


나에게 문제는 : 최대 절전 모드를 사용하면 이미 slf4j를 사용하고 클래스 경로에 이미 있음을 알았으므로 사용하기로 결정했습니다. 다음 단계-slf4j에 대한 구현자를 추가하여 maven에 추가했습니다.

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>1.7.25</version>
</dependency>

그러나 오류로 실패했습니다! SLF4J :“org.slf4j.impl.StaticLoggerBinder”클래스를로드하지 못했습니다.

해결책은 다음과 같습니다. slf4j의 Hibernate 종속성은 버전 1.7.26 이고 마이너 버전 종속성 1.7.25를 추가 했습니다 . 그래서 내가 고쳤을 때-모두 괜찮아졌다

참고 URL : https://stackoverflow.com/questions/7421612/slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder



반응형