讀取及寫入應用程式記錄

總覽

當要求傳送至您的應用程式時,App Engine 會自動寫入要求記錄。在處理要求的期間,應用程式也可寫入應用程式記錄。本頁面將說明如何從應用程式寫入應用程式記錄、如何使用 Logs API 以透過程式讀取應用程式和要求記錄、如何在 Google Cloud Platform 主控台中查看記錄,以及如何解讀 App Engine 在要求期間寫入的要求記錄資料。

要求記錄和應用程式記錄

記錄資料有兩種,分別是要求記錄和應用程式記錄。App Engine 針對您應用程式處理的每一項要求自動寫入要求記錄,其中含有專案 ID、HTTP 版本等資訊。如需要求記錄可用屬性的完整清單,請參閱 RequestLog;如需要求記錄欄位的說明,另請參閱要求記錄表

每項要求記錄檔均包含與該要求相關聯的應用程式記錄檔 (AppLogLine) 清單,此清單是由 RequestLogs.getAppLogLines() 方法傳回。每筆應用程式記錄都包含寫入記錄的時間、記錄訊息與記錄層級。

寫入應用程式記錄

App Engine Java SDK 允許開發人員記錄下列嚴重性等級:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

INFOWARNINGSEVERE 等記錄等級顯示在記錄中,不提供額外的設定。如要將其他層級的記錄新增至您的 Java 應用程式,您必須在專案的 appengine-web.xml 檔案中加入適當的系統屬性,可能還必須修改 logging.properties 檔案,才能設定想要的記錄層級。這兩個檔案都是系統在您使用 Maven 建立新的 App Engine Java 專案時建立的,會存放在下列位置:

Maven 專案配置

如要新增 INFOWARNINGSEVERE 以外的記錄層級,請編輯 appengine-web.xml 檔案,在 <appengine-web-app> 標記中加入以下程式碼:

    <system-properties>
       <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

logging.properties 中的預設記錄層級是 INFO。如果想為您應用程式中的所有類別變更預設記錄層級,請編輯 logging.properties;舉例來說,您可以將 .level = INFO 變更為 .level = WARNING

在您應用程式的程式碼中,使用 java.util.logging.Logger API 寫入記錄檔訊息。以下示例說明如何寫入 Info 記錄檔訊息:

import java.util.logging.Logger;
//...

public class MyClass {

  private static final Logger log = Logger.getLogger(MyClass.class.getName());
  log.info("Your information log message.");
  //....

您的應用程式開始執行後,App Engine 會記錄訊息,以便日後存取。您可以按照下文的說明,使用 Logs API 透過程式讀取這些記錄,也可以在記錄檢視器中進行瀏覽。

Google Cloud Platform 主控台中的記錄網址格式

以下是 GCP Console 記錄檔網址格式的示例:

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

在主控台讀取記錄檔

要查看在標準環境中執行由應用程式所寫入的記錄,請使用記錄檢視器

如要在記錄檢視器中,透過標籤或文字搜尋功能來篩選記錄項目,請參閱基本記錄篩選器。如要使用運算式從任意數量的記錄中指定一組記錄項目,以便編寫進階記錄篩選器,請參閱進階記錄篩選器

一般來說,App Engine 記錄包含採用 Apache 合併記錄格式的資料,以及一些特殊的 App Engine 欄位,如以下記錄範例所示:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=1.9.76

瞭解要求記錄欄位

下表按照顯示順序列出欄位,並提供說明:

欄位順序 欄位名稱 是否一律會顯示? 說明
1 用戶端位址 用戶端 IP 位址,例如:192.0.2.0
2 RFC 1413 識別資訊 用戶端的 RFC 1413 識別資訊,幾乎一律是 - 字元
3 使用者 只有在應用程式使用 Users API 且使用者已登入時才會顯示。這個值是 Google 帳戶的「暱稱」部分;以 test@example.com 這個 Google 帳戶為例,記錄在此欄位的暱稱就是 test
4 時間戳記 要求時間戳記,例如:[27/Jun/2014:09:11:47 -0700]
5 要求查詢字串 要求的第一行,包括方法、路徑和 HTTP 版本,例如:GET / HTTP/1.1
6 HTTP 狀態碼 傳回的 HTTP 狀態碼,例如:200
7 回應大小 回應的位元組大小,例如:414
8 參照網址路徑 如果沒有參照網址,則記錄不會包含路徑,只會包含 -。參照網址路徑範例:"http://www.example.com/index.html"
9 使用者代理程式 向網路伺服器提供瀏覽器和作業系統識別資訊,例如:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 主機名稱 用戶端用以連接到 App Engine 應用程式的主機名稱,例如:(1-dot-calm-sylph-602.appspot.com)
11 經過時間 App Engine 處理要求所花費的總時間,以毫秒為單位。此時間長度不含在用戶端與執行應用程式執行個體的伺服器之間所花費的時間。範例:ms=195
12 CPU 毫秒數 完成要求所需的 CPU 毫秒數。這是實際執行應用程式程式碼的 CPU 所花費的毫秒數,以 1.2 GHz Intel x86 CPU 為基準。如果實際使用的 CPU 比基準快,則 CPU 毫秒數可能大於上方定義的實際經過時間。範例:cpu_ms=42
13 結束代碼 只有在執行個體取得要求後關閉的情況下才會顯示,格式是 exit_code=XXX,其中 XXX 是對應至執行個體關閉理由的 3 位數數字。系統不會記錄結束代碼,因為這類代碼主要是用於協助 Google 找出和修正問題。
14 預估費用 已淘汰。1000 筆類似要求的預估費用,以美元為單位,例如:cpm_usd=0.000046
15 佇列名稱 所用工作佇列的名稱,只有在要求使用了工作佇列時才會顯示。範例:queue_name=default
16 工作名稱 工作佇列中針對這個要求執行的工作名稱,只有在要求造成工作排入佇列時才會顯示。範例:task_name=7287390692361099748
17 待處理的佇列 只有在要求於待處理佇列中停留了一段時間的情況下才會顯示。如果您的記錄中有許多這類佇列,且/或值偏高,可能代表您需要更多執行個體來處理流量。範例:pending_ms=195
18 載入要求 只有在要求是載入要求時才會顯示,代表系統必須啟動執行個體。在理想的情況下,您的執行個體應盡可能長時間運作、保持在良好狀態,且在系統將其回收並再次啟動前,能夠處理大量的要求;也就是說,您不應在記錄中看到太多這類要求。範例:loading_request=1
19 執行個體 負責處理要求的執行個體的專屬 ID,例如:instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 版本 目前在 App Engine 實際工作環境中所用的 App Engine 版本:1.9.76

配額與限制

應用程式會受到下列記錄相關配額的影響:

  • 透過 Logs API 擷取的記錄資料。
  • 記錄內容擷取的配額與保留期。

擷取資料的配額

每天透過 Logs API 呼叫擷取的記錄資料中,前 100 MB 的資料為免費。超過 100 MB 後,除非應用程式啟用計費功能,否則無法執行後續的 Logs API 呼叫。如果應用程式已啟用計費功能,則超過 100 MB 的資料會產生 $0.12 美元/GB 的費用。

記錄內容擷取配額

App Engine 應用程式的記錄功能是由 Stackdriver 提供。如要進一步瞭解記錄費用與限制,請參閱 Stackdriver 計價方式。如需長期儲存記錄檔,您可從 Stackdriver 將記錄檔匯出至 Cloud Storage、BigQuery 和 Cloud Pub/Sub。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 8 適用的 App Engine 標準環境