gpt4 book ai didi

java - 如何重定向 AWS sdk 日志记录输出

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:15 24 4
gpt4 key购买 nike

即使我正在使用 logback 并对其进行配置,我仍然会在 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)

这是我的 logback 配置:

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

解决方法:

强制通过 logback 进行日志记录,而不是 commons-logging:

在 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 绕过 logback 中获得的日志看起来真的很像(至少它们不遵循您的 logback 配置中定义的任何模式)。

可能有两个原因:

  1. 您以某种不太可能的方式错误配置了 logback(通过检查是否有任何日志条目最终出现在您配置的 logback 写入的文件中来验证这一点)。

  2. AWS sdk 的日志由 commons logging 处理(最有可能,因为这是 AWS sdk 使用的日志记录系统)或模仿 commons logging 的东西将日志重定向到,例如 SLF4J(不太可能,因为这需要对类路径进行一些显式配置)。

现在要处理这个问题,我建议您从 this article 开始了解 Java 的日志记录动物园的概况。

接下来,为了解决您的问题,我建议您配置流行的日志记录系统(公共(public)日志记录、log4j 等)以将其日志定向到 SLF4j,并使用 logback 作为 SLF4j 实现。

阅读this , 和 this (如果你使用 Maven,否则找到一种方法来排除与你的构建系统相关的 jcl 和 log4j)以了解什么应该和什么不应该放在你的类路径中。

我的一个项目使用 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>

...并且所有日志最终都写入了我的日志文件。

这应该让您了解应该如何配置依赖项/日志记录。

请随时澄清评论中不清楚的地方。

关于java - 如何重定向 AWS sdk 日志记录输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com