記錄

開發任何類型的應用程式時,您經常會想記錄資訊, 在開發期間診斷錯誤、識別及診斷客戶問題。 用於其他用途

Apps Script 提供三種不同的記錄機制:

  • 內建的 Apps Script 執行記錄。 這個記錄檔是輕量級資料,能夠即時顯示串流內容,但只會保留 縮短作業時間

  • 「Cloud Logging」介面 開發人員控制台:提供持續保留數天的記錄 建立。

  • Error Reporting 介面 用於收集並記錄 就能開始執行指令碼

我們會在以下各節中說明。除了這些機制之外 您也可以自行建構記錄器程式碼 新增到記錄試算表JDBC 資料庫

使用 Apps Script 執行記錄

使用 Apps Script 記錄的基本方式為使用內建 執行記錄。如要查看這些記錄,請點選頂端 按一下編輯器的「Execution log」。當您執行函式或使用 以及記錄檔串流

您可以使用 Loggerconsole 記錄服務 內建執行記錄檔。

這些記錄檔適用於在開發和偵錯期間的簡單檢查, 且不會太久

例如,請思考這個函式:

utils/logging.gs
/**
 * Logs Google Sheet information.
 * @param {number} rowNumber The spreadsheet row number.
 * @param {string} email The email to send with the row data.
 */
function emailDataRow(rowNumber, email) {
  console.log('Emailing data row ' + rowNumber + ' to ' + email);
  try {
    const sheet = SpreadsheetApp.getActiveSheet();
    const data = sheet.getDataRange().getValues();
    const rowData = data[rowNumber - 1].join(' ');
    console.log('Row ' + rowNumber + ' data: ' + rowData);
    MailApp.sendEmail(email, 'Data in row ' + rowNumber, rowData);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed with error %s', err.message);
  }
}

當這個指令碼的輸入內容為「2」一併執行時以及「john@example.com」這個 寫入記錄檔如下:

[16-09-12 13:50:42:193 (太平洋夏令時間)] 將第 2 列電子郵件傳送至 john@example.com
[16-09-12 13:50:42:271 PDT] 第 2 列資料:費用 103.24

Cloud Logging

Apps Script 也提供 Google Cloud Platform (GCP) 的部分存取權 Cloud Logging 服務。當您 需要持續數天的記錄功能,或需要更複雜的記錄 適用於多使用者實際工作環境的解決方案,建議您使用 Cloud Logging 就是用哪一種烤箱或刀子都可以 那麼預先建構的容器或許是最佳選擇請參閱 Cloud Logging 配額與限制 ,瞭解資料保留及其他配額詳細資料。

如果您需要更多記錄配額,可以 提交 Google Cloud Platform 配額要求。 您必須能夠存取 Cloud Platform 專案 控制點

使用 Cloud Logging

Cloud 記錄檔已附加至 Google Cloud 專案 。可以看到 ,前往 Apps Script 資訊主頁

如要充分運用 Cloud Logging 和其功能,請使用 標準 Google Cloud 專案 建立 Deployment這樣一來,您就能直接在 GCP 控制台 並提供更多檢視與篩選選項

記錄時,請建議避免錄製任何個人資訊 使用者的相關資訊,例如電子郵件地址。Cloud 記錄檔是 自動加上「標籤」標籤 有效使用者金鑰 方便您在必要時找出特定使用者的記錄訊息。

您可以使用 使用 Apps Script 提供的函式 console 服務。

以下範例說明瞭如何使用 console 服務來記錄 Cloud 作業套件資訊。

utils/logging.gs
/**
 * Logs the time taken to execute 'myFunction'.
 */
function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "jsonPayload".
  const parameters = {
    isValid: true,
    content: 'some string',
    timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});
  const label = 'myFunction() time'; // Labels the timing log entry.
  console.time(label); // Starts the timer.
  try {
    myFunction(parameters); // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label); // Stops the timer, logs execution duration.
}

有效使用者金鑰

暫時活躍使用者金鑰可讓您輕鬆找出在 Cloud 記錄項目,但不會透露這些使用者的身分。索引鍵 按照指令碼執行,每個月大約變更一次,以提供額外的安全防護 是否應向使用者顯示開發人員的身分,例如在檢舉時揭露自己的身分 問題。

臨時活躍使用者金鑰優於記錄 ID 等 ID 地址,因為:

  • 您不必在記錄中新增任何項目;他們就在那裡!
  • 因此不需要使用者授權。
  • 能保護使用者隱私。

如要在 Cloud 記錄項目中尋找臨時活躍使用者金鑰,請 在 Google Cloud 控制台中查看 Cloud 記錄檔。 如要這麼做,您的指令碼專案必須使用 標準 Google Cloud 專案 連結在控制台中開啟 Google Cloud 專案後 選取感興趣的記錄項目並展開即可查看 中繼資料 >標籤 >script.googleapis.com/user_key.

您也可以呼叫 Session.getTemporaryActiveUserKey()敬上 。其中一種做法是向使用者顯示金鑰 以及正在執行指令碼使用者可以選擇加入金鑰 以協助您找出相關記錄。

記錄例外狀況

例外狀況記錄功能會在指令碼專案程式碼中傳送未處理的例外狀況 以及堆疊追蹤

如要查看例外狀況記錄,請按照下列步驟操作:

  1. 開啟 Apps Script 專案。
  2. 按一下左側的「執行」圖示
  3. 按一下頂端的「新增篩選器」圖示>狀態
  4. 勾選「失敗」和「逾時」核取方塊。

您也可以在 GCP 控制台中查看記錄的例外狀況 如果指令碼專案使用 標準 Google Cloud 專案 連結

啟用例外狀況記錄功能

新專案預設會啟用例外狀況記錄功能。如何啟用例外狀況 為較舊的專案記錄資料,請按照以下步驟操作:

  1. 開啟指令碼專案。
  2. 按一下左側的「專案設定」
  3. 勾選「Log uncaughtException to Cloud Operations」(將未擷取的例外狀況記錄至 Cloud 作業) 核取方塊。

Error Reporting

例外狀況記錄會自動與 Cloud Error Reporting 這項服務,可匯總並顯示指令碼產生的錯誤。 你可以 在 Google Cloud 控制台中查看 Cloud 錯誤報告。 如果系統提示您「設定 Error Reporting」這是因為 指令碼尚未記錄任何例外狀況。只需 啟用例外狀況記錄

記錄需求

使用內建執行記錄沒有任何要求。

如要查看簡化版 Cloud 記錄檔,請前往 Apps Script 資訊主頁。不過, 如要充分運用 Cloud Logging 和錯誤回報功能,您必須擁有存取權 新增至指令碼的 GCP 專案只有在腳本專案才能做到 使用標準 Google Cloud 專案