如何从AmazonEC2客户端删除DEBUG日志记录



我有下面的简单代码

AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
DescribeInstancesRequest request = new DescribeInstancesRequest();
DescribeInstancesResult response = ec2.describeInstances(request);

在运行此代码时,我看到了多行调试输出。我只显示下面的开头。如何删除此输出?

14:03:29.877 [main] DEBUG com.amazonaws.AmazonWebServiceClient - Internal logging successfully configured to commons logger: true
14:03:38.129 [main] DEBUG com.amazonaws.metrics.AwsSdkMetrics - Admin mbean registered under com.amazonaws.management:type=AwsSdkMetrics
14:03:38.480 [main] DEBUG com.amazonaws.auth.AWSCredentialsProviderChain - Unable to load credentials from EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY))
14:03:38.482 [main] DEBUG com.amazonaws.auth.AWSCredentialsProviderChain - Unable to load credentials from SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey)
14:03:38.580 [main] DEBUG com.amazonaws.auth.AWSCredentialsProviderChain - Loading credentials from com.amazonaws.auth.profile.ProfileCredentialsProvider@7fb9f71f
14:03:38.786 [main] DEBUG com.amazonaws.request - Sending Request: POST https://ec2.us-east-1.amazonaws.com / Parameters: ({"Action":["DescribeInstances"],"Version":["2016-11-15"]}Headers: (User-Agent: aws-sdk-java/1.11.135 Mac_OS_X/10.12.6 Java_HotSpot(TM)_64-Bit_Server_VM/25.144-b01/1.8.0_144, amz-sdk-invocation-id: 0a1303b3-16c0-b140-8d9b-b2e22dc685b1, ) 
14:03:40.160 [main] DEBUG com.amazonaws.auth.AWS4Signer - AWS4 Canonical Request: '"POST /
amz-sdk-invocation-id:0a1303b3-16c0-b140-8d9b-b2e22dc685b1
amz-sdk-retry:0/0/500
host:ec2.us-east-1.amazonaws.com
user-agent:aws-sdk-java/1.11.135 Mac_OS_X/10.12.6 Java_HotSpot(TM)_64-Bit_Server_VM/25.144-b01/1.8.0_144
x-amz-date:20171113T190338Z

Log4j假设

假设您的应用程序的日志记录系统是通过Java类路径底部的属性文件(如log4j.properties)配置的,您可以通过包含行来减少日志记录程序的冗长性

log4j.logger.com.amazonaws=WARN

WARNERROR将保证您在AWS SDK中为记录器获得最少的日志量。

如果您希望为AWS SDK的特定组件保持更细粒度的日志记录级别,您可以始终覆盖受限范围(即com.amazonaws的子包)上的级别,例如

log4j.logger.com.amazonaws.request=INFO

AWS Java SDK支持的日志记录框架

AWS SDK文档指出">支持的日志记录系统包括Java日志记录框架和Apache Log4j等"。我建议您参考Logging AWS SDK for Java Calls以获得进一步的参考。

检查测试使用的日志框架

Gradle引用的Apache Commons日志记录库是日志记录库之上的抽象层,日志记录库提供了记录器的实际实现。它本身并不是测试所使用的日志记录实现。在您提供的语句中,您使用的是Java日志记录框架(java.util.Logger,也称为JUL)。但是它真的是您的测试使用的日志记录实现吗?

为了验证log4j是否在测试的类路径上,可以做一个快速检查,即添加VM参数-Dlog4j.debug=true并启动测试。如果log4j在类路径上,您将看到控制台上打印的库的一些输出。

您还可以检查测试的运行时类路径,因为可能存在对日志库的可传递依赖关系(而不是直接依赖关系),这些依赖关系可能在编译时依赖关系列表中不可见。

最后一种可能性是在那里放置一个断点并进行调试,以查看SDK本身使用了哪个记录器(在测试中调用此代码是因为它显示在您提供的日志中)。

在引导spring引导环境之前,我一直在使用spring引导和aws客户端来获取一些秘密,但所有的秘密都会进入调试消息,然后我尝试了很多方法,但这对我来说是有效的:

LoggerContext loggerContext = (LoggerContext) 
LoggerFactory.getILoggerFactory();
loggerContext.getLogger("org.apache.http").setLevel(Level.INFO);
loggerContext.getLogger("com.amazonaws").setLevel(Level.INFO);

最新更新