programing

로깅 프레임워크 비호환성

goodsources 2022. 9. 28. 00:16
반응형

로깅 프레임워크 비호환성

저는 작은 자바 앱을 만들고 있는데 로그백을 사용하여 로그백을 하고 싶습니다.

내 앱은 로깅을 수행하는 이전 프로젝트에 종속되어 있습니다.

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 중 하나를 사용하고 싶습니다.또, 「새로운」로깅 프레임워크가 되는 것에 대해서, 공통의 설정을 사용해 낡은 프로젝트의 로그인을 Marge 하고 싶다고 생각하고 있습니다.

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메서드가 변경되었습니다(개체 추가[] 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-compliance-checker 도구를 사용하여 생성할 수 있습니다.

여기에 이미지 설명 입력

저와 비슷한 처지에 있는 사람들을 돕기 위해서...

이 문제는 종속 라이브러리가 실수로 이전 버전의 slf4j를 번들한 경우에 발생할 수 있습니다.제 경우 티카-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

반응형