ログバックを使用して構成しているにもかかわらず、STDOUTでそれらを取得し続けます。コンソールからAWSを取り出すことができません。
Jun 19, 2014 3:46:40 PM com.amazonaws.http.AmazonHttpClient executeHelper
INFO: Unable to execute HTTP request: The target server failed to respond
org.apache.http.NoHttpResponseException: The target server failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:95)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doReceiveResponse(SdkHttpRequestExecutor.java:66)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:713)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:518)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:402)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3573)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:990)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:970)
at com.here.prime.cdtfilter.S3MapStore$$anonfun$1.apply(S3MapStore.scala:49)
at com.here.prime.cdtfilter.S3MapStore$$anonfun$1.apply(S3MapStore.scala:48)
at com.here.prime.utils.Utils$.retry(Utils.scala:26)
これは私のログバック設定です:
<configuration debug="false" scan="true" scanPeriod="30 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<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>cdtxfilter.log</file>
<append>true</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.amazonaws.request" level="WARN">
</logger>
<root level="DEBUG">
<!--<appender-ref ref="STDOUT" />-->
<appender-ref ref="FILE" />
</root>
</configuration>
解決:
commons-loggingの代わりに、logbackを介してロギングを強制します。
build.sbtに追加:
resolvers ++= Seq(
"version99 Empty loggers" at "http://version99.qos.ch",
)
libraryDependencies ++= Seq(
"org.slf4j" % "jcl-over-slf4j" % "1.7.7",
"commons-logging" % "commons-logging" % "99-empty",
"ch.qos.logback" % "logback-classic" % "1.0.13",
)
logback.xmlで、AWS SDK内のノイズの多いクラスのログレベルを微調整します。
<configuration...
[..]
<logger name="com.amazonaws" level="ERROR"/>
<logger name="org.apache.http" level="INFO" />
</configuration>
まずお伝えしたいのは、歴史的な理由により、Javaへのログインはごちゃごちゃしていて、正しくするために少し努力する準備ができている必要があるということです。
さて、あなたの問題に。
まず第一に、STDOUTバイパスログバックで取得しているログのように見えます(少なくとも、ログバック構成で定義されているパターンには従いません)。
その理由は2つあります。
可能性が低い何らかの方法でlogbackを誤って構成しました(logbackを構成したファイルにログエントリが最終的に書き込まれるかどうかを確認して、これを確認してください)。
AWS sdkからのログは、コモンズロギング(これはAWS sdkで使用されるロギングシステムであるため)か、コモンズロギングを模倣してログをSLF4Jなどにリダイレクトするもの(可能性が低いため、明示的な必要があるため)クラスパスの構成)。
これに対処するには、この記事から始めて、Javaのロギング動物園の概要を理解することをお勧めします。
次に、問題を解決するために、一般的なロギングシステム(commons logging、log4jなど)を構成して、ログをSLF4jに送信し、logbackをSLF4j実装として使用することをお勧めします。
これとこれを読んで(Mavenを使用している場合は、ビルドシステムに関連するjclとlog4jを除外する方法を見つけてください)、クラスパスに何を入れるべきか、何を入れるべきでないかを理解してください。
私のプロジェクトの1つはAWS SDKを使用しており、上記のようにログが設定されています。
私の場合、pom.xml
次のように依存関係を設定します。
...
<repositories>
<repository>
<id>version99</id>
<url>http://version99.qos.ch/</url>
</repository>
</repositories>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>99-empty</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>99-empty</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
...
</dependencies>
...
...そしてまた私のクラスパスで私はlogback.xml
このようにしています:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs.log</file>
<append>false</append>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE" />
</root>
...そして、すべてのログが最終的に私のログファイルに書き込まれます。
これにより、依存関係/ログの構成方法に関するアイデアが得られます。
コメントで不明確な瞬間を明確にしてください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加