0

logback-ext-cloudwatch-appender라는 라이브러리를 사용하여 로그백 기반 로그를 AWS Cloudwatch에 보냅니다. 이것은 pom.xml 파일에서 종속성이 어떻게 생겼는지를 나타냅니다.com.amazonaws.transform.JsonErrorUnmarshaller : method <init> (Ljava/lang/Class;) V를 찾을 수 없음

<dependency> 
     <groupId>org.eluder.logback</groupId> 
     <artifactId>logback-ext-cloudwatch-appender</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 

며칠 전 이러한 오류가 로그에 표시되기 시작했습니다.

java.lang.NoSuchMethodError: com.amazonaws.transform.JsonErrorUnmarshaller: method <init>(Ljava/lang/Class;)V not found 
    at com.amazonaws.services.logs.model.transform.InvalidParameterExceptionUnmarshaller.<init>(InvalidParameterExceptionUnmarshaller.java:26) 
    at com.amazonaws.services.logs.AWSLogsClient.init(AWSLogsClient.java:280) 
    at com.amazonaws.services.logs.AWSLogsClient.<init>(AWSLogsClient.java:275) 
    at com.amazonaws.services.logs.AWSLogsClient.<init>(AWSLogsClient.java:248) 
    at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.doStart(AbstractCloudWatchAppender.java:100) 
    at org.eluder.logback.ext.aws.core.AbstractAwsEncodingStringAppender.start(AbstractAwsEncodingStringAppender.java:123) 
    at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.start(AbstractCloudWatchAppender.java:95) 
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.getDelegate(Unknown Source) 
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.append(Unknown Source) 
    at ch.qos.logback.ext.spring.DelegatingLogbackAppender.append(Unknown Source) 
    at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84) 
    at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48) 
    at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270) 
    at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257) 
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421) 
    at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383) 
    at ch.qos.logback.classic.Logger.info(Logger.java:579) 
    (truncated) 

AWS 1.11.5로 업그레이드했지만, 해당 릴리스에서 버그가 발견되지 않았습니다.

답변

3

이 logback-EXT-CloudWatch를-펜더의 현재 버전이 다른 AWS-자바와 하지 호환 AWS-자바 SDK-로그 1.10.2의 특정 버전에 전이 종속성이 밝혀 -sdk 라이브러리 1.11.0 이상. 우리는 다른 많은 aws-java-sdk 라이브러리를 사용합니다. 이와 같은 의존성을 제외했습니다.

<dependency> 
    <groupId>org.eluder.logback</groupId> 
    <artifactId>logback-ext-cloudwatch-appender</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <exclusions> 
     <exclusion> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-core</artifactId> 
     </exclusion> 
     <exclusion> 
      <groupId>com.amazonaws</groupId> 
      <artifactId>aws-java-sdk-logs</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk-core</artifactId> 
    <version>1.11.5</version> 
</dependency> 
<dependency> 
    <groupId>com.amazonaws</groupId> 
    <artifactId>aws-java-sdk-logs</artifactId> 
    <version>1.11.5</version> 
</dependency> 

그 시점에서 우리는 또 다른 오류가 발생하기 시작했습니다.

Exception in thread "org.myorg.task.MyTask working" java.lang.NoSuchMethodError: com.amazonaws.services.logs.AWSLogsClient.createLogGroup(Lcom/amazonaws/services/logs/model/CreateLogGroupRequest;)V 
     at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.createLogGroup(AbstractCloudWatchAppender.java:171) 
     at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.doStart(AbstractCloudWatchAppender.java:107) 
     at org.eluder.logback.ext.aws.core.AbstractAwsEncodingStringAppender.start(AbstractAwsEncodingStringAppender.java:123) 
     at org.eluder.logback.ext.cloudwatch.appender.AbstractCloudWatchAppender.start(AbstractCloudWatchAppender.java:95) 
     at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90) 
     at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309) 
     at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193) 
     at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179) 
     at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62) 
     at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:155) 
     at ch.qos.logback.core.sift.SiftingJoranConfiguratorBase.doConfigure(SiftingJoranConfiguratorBase.java:82) 
     at ch.qos.logback.core.sift.AbstractAppenderFactoryUsingJoran.buildAppender(AbstractAppenderFactoryUsingJoran.java:51) 
     at ch.qos.logback.core.sift.AppenderTracker.buildComponent(AppenderTracker.java:56) 
     at ch.qos.logback.core.sift.AppenderTracker.buildComponent(AppenderTracker.java:32) 
     at ch.qos.logback.core.spi.AbstractComponentTracker.getOrCreate(AbstractComponentTracker.java:124) 
     at ch.qos.logback.core.sift.SiftingAppenderBase.append(SiftingAppenderBase.java:104) 
     at ch.qos.logback.core.AppenderBase.doAppend(AppenderBase.java:82) 
     at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48) 
     at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270) 
     at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257) 
     at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421) 
     at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383) 
     at ch.qos.logback.classic.Logger.info(Logger.java:579) 

의존성을 제외하면 작동하지 않습니다. 나는 현재 1.11.5 aws-java-sdk 라이브러리에 의존하여 logback-ext-cloudwatch-appender 항아리를 포크하고 다시 빌드해야했다. 이전 라이브러리에 대해 빌드 된 logback-ext-cloudwatch-appender jar에 새로운 AWS 종속성을 사용하려고 시도하면 createLogGroup의 메소드 서명 (리턴 유형)이 일치하지 않아 런타임 오류가 발생합니다. 이 작업을 실행하기 위해서, 나는 fork 된 버전에서 소스 코드가 아닌 pom.xml 파일 만 변경해야했습니다.

+5

이 대답을 "내 의존성을 살펴 보겠습니다."라고 해석했습니다. MavenCentral에 나와있는 것처럼'aws-java-sdk'과'aws-java-sdk-core'를 최신 버전으로 업데이트하여 오류를 해결했습니다! – Shadoninja

+0

AWS에 속하지 않은 logback-ext-cloudwatch-appender를 사용하고 있지 않다면 동의합니다. 그게 수정을하는 방법에 대한 높은 수준의 설명입니다. –

+1

내 클라우드 검색 appender에서 동일한 문제가 발생했습니다. 나는 그것을 createLogGroup 호출에 대한 반사를 사용하여 해결했다고 생각한다. https://github.com/j256/cloudwatch-logback-appender/commit/9524f6c095139635c8128ab2ec75c5487da9bf82 – Gray