記錄 AWS SDK for Java 呼叫 - AWS SDK for Java 1.

我們宣布了即將推 end-of-support 出的 AWS SDK for Java (v1)。我們建議您移轉至 AWS SDK for Java v2。有關日期,其他詳細信息以及如何遷移的信息,請參閱鏈接的公告。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

記錄 AWS SDK for Java 呼叫

Apache 的 AWS SDK for Java 共享資源日誌,這是一個抽象層,使得在運行時使用多個日誌系統中的任何一個進行檢測。

支援的記錄系統包括 Java Logging Framework 和 Apache Log4j 等等。本主題說明如何使用 Log4j。您可以使用開發套件的記錄功能,而無需更改您的應用程式程式碼。

若要進一步了解 Log4j,請參閱 Apache 網站

注意

本主題著重於 Log4j 的 1.x。Log4j2 不直接支持阿帕奇共享資源日誌記錄,但提供了一個適配器,使用 Apache 共享資源日誌記錄接口自動將調用記錄定向 Log4j2。如需詳細資訊,請參閱 Log4j2 文件中的維基資源記錄橋接器。

下載日誌 JAR

要使用 Log4j 的與 SDK,你需要從阿帕奇網站下載 Log4j 的 JAR。開發套件不包含 JAR。將 JAR 檔案複製到類別路徑上的位置。

Log4j 的使用一個配置文件,log4j. 屬性。範例組態檔案如下所示。將此配置文件複製到類路徑上的目錄中。Log4j 的 JAR 和 log4j. 屬性檔案不一定要位於相同的目錄中。

log4j.properties 組態檔會指定內容,例如記錄層級、將記錄輸出傳送到檔案或主控台的位置,以及輸出的格式。記錄層級是記錄器所產生輸出的精細度。Log4j 支援多個記錄階層的概念。每個階層的記錄層級都是獨立設定。以下兩個記錄階層可用於 AWS SDK for Java:

  • 日誌. 日誌. 日誌.

  • 日誌. 日誌. 或者.

設定 Classpath

Log4j JAR 和 log4j. 屬性檔案都必須位於您的類別路徑中。如果您使用的是 Apache Ant,請在 Ant 文件中的path元素中設置類路徑。以下示例顯示了來自 Ant 文件的路徑元素,用於 SDK 中包含的示 Amazon S3

<path id="aws.java.sdk.classpath"> <fileset dir="../../third-party" includes="**/*.jar"/> <fileset dir="../../lib" includes="**/*.jar"/> <pathelement location="."/> </path>

如果您是使用 Eclipse IDE,可以開啟選單並導覽到 Project (專案) | Properties (屬性) | Java Build Path (Java 建置路徑) 來設定 classpath。

服務特定錯誤與警告

我們建議您始終將「com.amazonaws」記錄器層次結構設置為「WARN」,以 catch 客戶端庫中的任何重要消息。例如,如果用 Amazon S3 戶端偵測到您的應用程式未正確關閉InputStream並且可能洩漏資源,則 S3 用戶端會透過警告訊息向記錄檔報告。這也可確保在用戶端處理請求或回應發生任何問題時,會記錄訊息。

下面的 log4j. 屬性文件設置rootLogger為警告,這會導致來自「com.amazonaws」層次結構中的所有記錄器的警告和錯誤消息被包含在內。或者,您可以明確地將 com.amazonaws 記錄器設置為警告。

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

請求/回應摘要記錄

對 a 的每個請求都 AWS 服務 會生成一個唯一的 AWS 請求 ID,如果您遇到有關如何處理請求的問題,該請求將 AWS 服務 非常有用。 AWS 要求識別碼可透過 SDK 中的例外狀況物件以程式設計方式存取,以程式設計方式存取任何失敗的服務呼叫,也可以透過「com.amazonaws.request」記錄程式中的 DEBUG 記錄檔層級進行報告。

下列 log4j. 屬性檔案會啟用要求和回應的摘要,包括 AWS 要求識別碼。

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]