日志是用于调试和监控代码的重要工具。Cloud Functions 让您可以选择使用其 logger SDK、自定义 Google Cloud Logging 或是面向 Web 开发的 console
对象标准。
写入日志
虽然在大多数情况下,我们都推荐使用 Cloud Functions logger SDK,但您可能会出于以下原因选择其他方案,比如:
- 您已有成形的代码库,不想从
console.log
进行重构。 - 您熟悉 Cloud Logging(以前称为 StackDriver Logging),并且希望用它进行自定义日志记录。
使用 Cloud Functions logger SDK
Cloud Functions logger SDK 提供了一个标准接口,该接口具有与 console.log
语句类似的 API,并支持其他日志级别。您可以使用此 SDK 记录包含结构化数据的事件,更轻松地进行分析和监控。
logger SDK 支持在通配符导入中包含日志条目。例如:
const functions = require("firebase-functions/v1");
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()
命令具有 WARNING 日志级别。logger.error()
命令具有 ERROR 日志级别。- 内部系统消息具有 DEBUG 日志级别。
借助 logger.write()
,您可以为日志条目写入其他日志严重级别,包括 CRITICAL
、ALERT
和 EMERGENCY
。请参阅 LogSeverity。
自定义 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
使用适用于您平台的 logger SDK 是通过函数进行日志记录的建议解决方案。使用 Node.js 时,您可以改用标准 JavaScript 日志记录调用(如 console.log
和 console.error
),但您首先需要使用一个特殊模块来修补标准方法,以使其正常运作:
require("firebase-functions/logger/compat");
纳入所需的 Logger 兼容性模块后,您可以像往常一样在代码中使用 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 日志级别。
查看日志
您可以在 Google Cloud 控制台、Cloud Logging 界面或通过 firebase
命令行工具查看 Cloud Functions 的日志。
使用 Firebase CLI
如需使用 firebase
工具查看日志,请使用 functions:log
命令:
firebase functions:log
如需查看特定函数的日志,请以参数形式提供函数名称:
firebase functions:log --only <FUNCTION_NAME>
如需了解全部日志查看选项,请参阅 functions:log
的帮助信息:
firebase help functions:log
使用 Google Cloud 控制台
您可以在 Google Cloud 控制台中查看函数的日志。
使用 Cloud Logging 界面
您可以在 Cloud Logging 界面中查看 Cloud Functions 的日志。
分析日志
Cloud Logging 提供了一套功能强大的日志分析工具,您可以使用这些工具监控 Cloud Functions。
图表和提醒
创建基于日志的指标以监控您的函数后,您可以根据这些指标创建图表和提醒。例如,您可以创建一个图表来直观呈现指定时间段内的延迟,或创建一个提醒来让您知道某个错误是否出现得过于频繁。
如需详细了解如何在图表和提醒政策中使用基于日志的指标,请参阅创建图表和提醒。