0

Wir verwenden eine Bibliothek mit dem Namen logback-ext-cloudwatch-appender, um unsere Logback-basierten Protokolle an AWS Cloudwatch zu senden. So sieht die Abhängigkeit in unserer pom.xml-Datei aus.com.amazonaws.transform.JsonErrorUnmarshaller: Methode <init> (Ljava/lang/Klasse;) V nicht gefunden

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

Vor ein paar Tagen begannen diese Fehler in unseren Protokollen zu erscheinen.

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) 

ich herausgefunden habe, dass wir auf AWS 1.11.5 aktualisiert hatte, aber ich konnte keine Beweise für eine solche Fehler in dieser Version nicht finden.

Antwort

3

Es stellt sich heraus, dass die aktuelle Version von logback-ext-Cloudwatch-appender eine transitive Abhängigkeit von einer bestimmten Version von aws-java-sdk-Protokolle 1.10.2, die mit anderen aws-java nicht kompatibel ist, hat -sdk-Bibliotheken 1.11.0 und höher. Wir verwenden eine Reihe anderer aws-java-sdk-Bibliotheken. Wir haben die Abhängigkeit so ausgeschlossen.

<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> 

An diesem Punkt bekamen wir einen weiteren Fehler.

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) 

Lediglich die Abhängigkeiten auszuschließen funktionierte nicht. Ich musste den logback-ext-cloudwatch-appender jar mit einer Abhängigkeit von den aktuellen 1.11.5 aws-java-sdk-Bibliotheken forkieren und neu aufbauen. Der Versuch, die neuen AWS-Abhängigkeiten mit dem logback-ext-cloudwatch-appender-jar zu verwenden, das für die alten Bibliotheken erstellt wurde, verursachte einen Unterschied in der Methodensignatur (Rückgabetyp) von createLogGroup, die einen Laufzeitfehler verursachte. Um dies zu erreichen, musste ich nur die pom.xml-Dateien, nicht den Quellcode, in meiner gegabelten Version ändern.

+5

Ich interpretierte diese Antwort als "gehen Sie einen Blick auf meine Abhängigkeiten." Ich habe meine 'aws-java-sdk' und' aws-java-sdk-core' auf die neusten Versionen aktualisiert, wie in MavenCentral gezeigt und es hat den Fehler für mich behoben! – Shadoninja

+0

Wenn Sie den logback-ext-cloudwatch-appender nicht wie wir verwenden, was kein Teil von AWS ist, dann stimme ich zu. Das ist die Beschreibung auf hoher Ebene, wie man zum Fix kommt. –

+1

Ich hatte das gleiche Problem in meinem Cloudwatch Appender. Ich denke, dass ich mit Reflektion über den createLogGroup-Aufruf daran gearbeitet habe: https://github.com/j256/cloudwatch-logback-appender/commit/9524f6c095139635c8128ab2ec75c5487da9bf82 – Gray

Verwandte Themen