developer tip

프레임 워크 비 호환성 로깅

optionbox 2020. 8. 4. 07:31
반응형

프레임 워크 비 호환성 로깅


작은 Java 앱을 작성 중이며 로깅에 로그 백을 사용하기를 희망합니다.

내 앱은 로깅을 수행하는 오래된 프로젝트에 의존합니다.

org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1

... 그래서 내 계획은

org.slf4j | jcl-over-slf4j | 1.5.6

... JCL 로깅을

org.slf4j | slf4j-api | 1.6.0

... 그리고 궁극적으로

ch.qos.logback | logback-classic | 0.9.22
ch.qos.logback | logback-core | 0.9.22

내 응용 프로그램은 slf4j API를 통해 로그 백을 통해 로그인 할 수 있지만 이전 라이브러리 코드는 리디렉션을 통해 동일한 위치에 로그인 할 수 있습니다.

아아, 결과

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
at   org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:141)

나는이 항아리 중 일부에 대해 더 높고 낮은 검증 번호를 시도하고 API 문서 등을 파헤 쳤지 만 ... 문제를 찾아서 해결할 수 없습니다.

도와주세요?

로그 백은 "전략적"로깅 프레임 워크로 간주되지만 궁극적으로 내가 사용하는 로깅 메커니즘에는 약간의 여유가 있습니다. 그래도 logback 또는 log4j를 사용하고 싶고, 일반적인 구성을 통해 이전 프로젝트의 로깅을 "새"로깅 프레임 워크로 병합하려는 것이 확실합니다.


1.5.6 버전의 jcl 브릿지를 1.6.0 버전의 slf4j-api와 혼합하고 있습니다. 1.6.0에서 약간의 변경으로 인해 작동하지 않습니다. 두 가지 모두에 동일한 버전을 사용하십시오 (예 : 1.6.1 (최신)). 나는 항상 jcl-over-slf4j 브리지를 사용하고 잘 작동합니다.


메소드 의 인수 목록 이 변경되었으므로 SLF4J 1.5.11 및 1.6.0 버전이 호환되지 않습니다 ( 호환성 보고서 참조 ) org.slf4j.spi.LocationAwareLogger.log(Object [] p5 추가).

SLF4J 1.5.11 :

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Throwable p5 )

SLF4J 1.6.0 :

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Object[] p5, Throwable p6 )

이 페이지의 다른 SLF4J 버전 대한 호환성 보고서를 참조하십시오 .

japi 준수 검사기 도구로 이러한 보고서를 생성 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오


나 자신과 비슷한 상황에있는 사람들을 돕기 위해 ...

종속 라이브러리가 실수로 이전 버전의 slf4j를 번들로 묶었을 때 발생할 수 있습니다. 제 경우에는 tika-0.8이었습니다. 참조 https://issues.apache.org/jira/browse/TIKA-556를

임시 해결책은 구성 요소를 제외하고 올바른 또는 패치 된 버전에 수동으로 의존하는 것입니다.

EG.

    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>0.8</version>
        <exclusions>
            <exclusion>
                <!-- NOTE: Version 4.2 has bundled slf4j -->
                <groupId>edu.ucar</groupId>
                <artifactId>netcdf</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <!-- Patched version 4.2-min does not bundle slf4j -->
        <groupId>edu.ucar</groupId>
        <artifactId>netcdf</artifactId>
        <version>4.2-min</version>
    </dependency>

참고 URL : https://stackoverflow.com/questions/3519978/logging-framework-incompatibility

반응형