截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,並將end-of-support
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
記錄 AWS SDK for Java 通話
會搭配 Apache Commons Logging
支援的記錄系統包括 Java Logging Framework 和 Apache Log4j 等等。本主題說明如何使用 Log4j。您可以使用 SDK的日誌記錄功能,而無需對應用程式程式碼進行任何變更。
注意
本主題著重於 Log4j 1.x。Log4j2 不直接支援 Apache Commons Logging,而是提供轉接器,使用 Apache Commons Logging 介面自動將呼叫記錄到 Log4j2。如需詳細資訊,請參閱 Log4j2 文件中的 Commons Logging Bridge
下載 Log4J JAR
若要搭配 使用 Log4jSDK,您需要JAR從 Apache 網站下載 Log4j。SDK 不包含 JAR。將JAR檔案複製到 classpath 上的位置。
Log4j 使用組態檔案 log4j.properties。範例組態檔案如下所示。將此組態檔案複製到 classpath 上的目錄。Log4j JAR和 log4j.properties 檔案不必位於相同的目錄中。
log4j.properties 組態檔案會指定記錄層級
-
log4j.logger.com.amazonaws
-
log4j.logger.org.apache.http.wire
設定 Classpath
Log4j JAR和 log4j.properties 檔案都必須位於 classpath 上。如果您使用的是 Apache Ant path
元素中設定 classpath。下列範例顯示 Ant 檔案的路徑元素, Amazon S3 其中包含 的範例
<path id="aws.java.sdk.classpath"> <fileset dir="../../third-party" includes="**/*.jar"/> <fileset dir="../../lib" includes="**/*.jar"/> <pathelement location="."/> </path>
如果您使用的是 Eclipse IDE,您可以開啟選單並導覽至專案 | 屬性 | Java 建置路徑 來設定 classpath。
服務特定錯誤與警告
我們建議您一律將「com.amazonaws」記錄器階層設定為「WARN」,以從用戶端程式庫中擷取任何重要訊息。例如,如果 Amazon S3 用戶端偵測到您的應用程式未正確關閉 InputStream
並可能洩漏資源,S3 用戶端會透過警告訊息向日誌回報。這也可確保在用戶端處理請求或回應發生任何問題時,會記錄訊息。
下列 log4j.properties 檔案會將 rootLogger
設定為 WARN,這會導致包含 "com.amazonaws" 階層中所有記錄器的警告和錯誤訊息。或者,您可以明確地將 com.amazonaws 記錄器設定為 WARN。
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Or you can explicitly enable WARN and ERROR messages for the {AWS} Java clients log4j.logger.com.amazonaws=WARN
請求/回應摘要記錄
如果您遇到 如何處理 AWS 服務 請求的問題,則 的每個請求都會 AWS 服務 產生唯一的 AWS 請求 ID。SDK對於任何失敗的服務呼叫, 中的例外物件IDs可以程式設計方式存取 AWS 請求,也可以透過「com.amazonaws.request」 記錄器中的DEBUG日誌層級進行報告。
下列 log4j.properties 檔案會啟用請求和回應的摘要,包括 AWS 請求 IDs。
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Turn on DEBUG logging in com.amazonaws.request to log # a summary of requests/responses with {AWS} request IDs log4j.logger.com.amazonaws.request=DEBUG
以下為日誌輸出的範例。
2009-12-17 09:53:04,269 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (MaxRecords: 20, Action: DescribeEngineDefaultParameters, SignatureMethod: HmacSHA256, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Engine: mysql5.1, Timestamp: 2009-12-17T17:53:04.267Z, Signature: q963XH63Lcovl5Rr71APlzlye99rmWwT9DfuQaNznkD, ) 2009-12-17 09:53:04,464 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6 2009-12-17 09:53:04,469 [main] DEBUG com.amazonaws.request - Sending Request: POST https://rds.amazonaws.com / Parameters: (ResetAllParameters: true, Action: ResetDBParameterGroup, SignatureMethod: HmacSHA256, DBParameterGroupName: java-integ-test-param-group-0000000000000, AWSAccessKeyId: ACCESSKEYID, Version: 2009-10-16, SignatureVersion: 2, Timestamp: 2009-12-17T17:53:04.467Z, Signature: 9WcgfPwTobvLVcpyhbrdN7P7l3uH0oviYQ4yZ+TQjsQ=, ) 2009-12-17 09:53:04,646 [main] DEBUG com.amazonaws.request - Received successful response: 200, {AWS} Request ID: 694d1242-cee0-c85e-f31f-5dab1ea18bc6
詳細連線記錄
在某些情況下,查看 AWS SDK for Java 傳送和接收的確切請求和回應可能很有用。您不應該在生產系統中啟用此登入,因為寫入大型請求 (例如,上傳到 的檔案 Amazon S3) 或回應可能會大幅降低應用程式的速度。如果您真的需要存取此資訊,可以透過 Apache HttpClient 4 記錄器暫時啟用。在org.apache.http.wire
記錄器上啟用 DEBUG層級可為所有請求和回應資料進行記錄。
下列 log4j.properties 檔案會在 Apache HttpClient 4 中開啟完整有線記錄,而且只能暫時開啟,因為它可能會對您的應用程式造成重大效能影響。
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # Log all HTTP content (headers, parameters, content, etc) for # all requests and responses. Use caution with this since it can # be very expensive to log such verbose data! log4j.logger.org.apache.http.wire=DEBUG
延遲指標記錄
如果您正在疑難排解,並想要查看指標,例如哪個程序耗時最多,或伺服器或用戶端的延遲是否更大,則延遲記錄器會很有幫助。將com.amazonaws.latency
記錄器設定為 DEBUG以啟用此記錄器。
注意
此記錄器只有在啟用SDK指標時才可用。若要進一步了解SDK指標套件,請參閱為 啟用指標 AWS SDK for Java。
log4j.rootLogger=WARN, A1 log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.logger.com.amazonaws.latency=DEBUG
以下為日誌輸出的範例。
com.amazonaws.latency - ServiceName=[{S3}], StatusCode=[200], ServiceEndpoint=[https://list-objects-integ-test-test.s3.amazonaws.com], RequestType=[ListObjectsV2Request], AWSRequestID=[REQUESTID], HttpClientPoolPendingCount=0, RetryCapacityConsumed=0, HttpClientPoolAvailableCount=0, RequestCount=1, HttpClientPoolLeasedCount=0, ResponseProcessingTime=[52.154], ClientExecuteTime=[487.041], HttpClientSendRequestTime=[192.931], HttpRequestTime=[431.652], RequestSigningTime=[0.357], CredentialsRequestTime=[0.011, 0.001], HttpClientReceiveResponseTime=[146.272]