获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

寫入和查看日誌

日誌記錄是調試和監控代碼的重要工具。 Cloud Functions 讓您可以選擇使用其記錄器 SDK、自定義 Google Cloud Logging 或console對象標准進行 Web 開發。

寫日誌

雖然在大多數情況下建議使用 Cloud Functions記錄器SDK,但出於以下原因,您可能會選擇其他選項之一:

  • 您有一個現有的代碼庫,並且不希望從console.log重構。
  • 您熟悉 Cloud Logging(以前稱為 StackDriver 日誌記錄),並且更喜歡將其用於自定義日誌記錄。

使用 Cloud Functions 記錄器 SDK

Cloud Functions logger SDK 提供了一個標準接口,該接口與console.log語句有類似的 api,並支持其他日誌級別。您可以使用此 SDK 以結構化數據記錄事件,從而更輕鬆地進行分析和監控。

logger SDK 支持將日誌條目作為通配符導入的一部分。例如:

  const functions = require("firebase-functions");

  functions.logger.log("Hello from info. Here's an object:", someObj);

或者,您可以使用單獨的導出。此示例演示作為最後一個參數附加到日誌的結構化數據:

const { warn } = require("firebase-functions/logger");


// Attach structured data to the log as the last argument.
warn("This is a 'WARNING' severity message with some metadata.", {
  key1: 'val1',
  key2: 'val2'
});
  • logger.log()命令具有INFO日誌級別。
  • logger.info()命令具有INFO日誌級別。
  • logger.warn()命令具有ERROR日誌級別。
  • logger.error()命令具有ERROR日誌級別。
  • 內部系統消息具有DEBUG日誌級別。

使用logger.write() ,您可以編寫日誌條目以及CRITICALALERTEMERGENCY的日誌嚴重級別。請參閱日誌嚴重性

自定義 Cloud Logging 日誌

帶有 logger SDK 的 Cloud Functions 日誌由Cloud Logging提供支持。您可以使用適用於 Node.js 的 Cloud Logging 庫來記錄包含結構化數據的事件,從而更輕鬆地進行分析和監控。

const { Logging } = require('@google-cloud/logging');

// ...

// Instantiate the logging SDK. The project ID will
// be automatically inferred from the Cloud Functions environment.
const logging = new Logging();
const log = logging.log('my-custom-log-name');

// This metadata is attached to each log entry. This specifies a fake
// Cloud Function called 'Custom Metrics' in order to make your custom
// log entries appear in the Cloud Functions logs viewer.
const METADATA = {
  resource: {
    type: 'cloud_function',
    labels: {
      function_name: 'CustomMetrics',
      region: 'us-central1'
    }
  }
};

// ...

// Data to write to the log. This can be a JSON object with any properties
// of the event you want to record.
const data = {
  event: 'my-event',
  value: 'foo-bar-baz',

  // Optional 'message' property will show up in the Firebase
  // console and other human-readable logging surfaces
  message: 'my-event: foo-bar-baz'
};

// Write to the log. The log.write() call returns a Promise if you want to
// make sure that the log was written successfully.
const entry = log.entry(METADATA, data);
log.write(entry);

使用console.log

從函數記錄的推薦解決方案是使用記錄器 SDK 。您可以改為使用標準 JavaScript 日誌記錄調用,例如console.logconsole.error ,但您首先需要一個特殊模塊來修補標準方法以使其正常工作:

require("firebase-functions/logger/compat");

一旦您需要記錄器兼容性模塊,您就可以在代碼中正常使用console.log()方法:

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • console.log()命令具有INFO日誌級別。
  • console.info()命令具有INFO日誌級別。
  • console.warn()命令具有ERROR日誌級別。
  • console.error()命令具有ERROR日誌級別。
  • 內部系統消息具有DEBUG日誌級別。

查看日誌

Cloud Functions 的日誌可在Google Cloud Console 、Cloud Logging UI 或通過firebase命令行工具查看。

使用 Firebase CLI

要使用firebase工具查看日誌,請使用functions:log命令:

firebase functions:log

要查看特定函數的日誌,請提供函數名稱作為參數:

firebase functions:log --only <FUNCTION_NAME>

有關完整的日誌查看選項,請查看functions:log的幫助:

firebase help functions:log

使用谷歌云控制台

您可以在Google Cloud Console中查看函數的日誌。

使用 Cloud Logging 界面

您可以在 Cloud Logging UI 中查看 Cloud Functions的日誌。

分析日誌

Cloud Logging 提供了一套功能強大的日誌分析工具,您可以使用這些工具來監控您的 Cloud Functions。這些工具與自定義日誌記錄結合使用時尤其強大。

基於日誌的指標

在 Cloud Logging UI 中,使用高級過濾器字段將日誌範圍縮小到您要分析的功能,然後點擊提交過濾器過濾日誌。例如,您可以僅分析來自單個函數的日誌:

resource.type="cloud_function"
resource.labels.function_name="myCloudFunction"
resource.labels.region="us-central1"

如果您使用自定義 JSON 負載記錄事件,則可以使用您提供的鍵和值進行過濾:

resource.type="cloud_function"
resource.labels.function_name="CustomMetrics"
jsonPayload.event="my-event"

過濾日誌後,您可以使用基於日誌的指標對其進行分析。單擊創建指標按鈕以打開指標編輯器並選擇指標類型:

  • 計數器指標:計算匹配過濾器的日誌條目數。例如,您可以計算某個事件發生的次數。
  • 分佈指標:從匹配過濾器的日誌條目中累積數字數據。例如,您可以跟踪函數中某些操作的延遲。

對於基於文本的日誌,例如由函數中的console.log()生成的日誌,您可以使用正則表達式從textPayload字段中提取值和標籤。對於帶有結構化數據的自定義日誌,您可以直接訪問jsonPayload字段中的數據。

圖表和警報

一旦您創建了基於日誌的指標來監控您的功能,您就可以根據這些指標創建圖表和警報。例如,您可以創建一個圖表來可視化一段時間內的延遲,或者創建一個警報來讓您知道某個錯誤是否經常發生。

有關如何在圖表和警報策略中使用基於日誌的指標的詳細信息,請參閱創建圖表和警報