

# 边缘函数日志
<a name="edge-functions-logs"></a>

可以使用 Amazon CloudWatch Logs 获取边缘函数（包括[ Lambda@Edge](lambda-at-the-edge.md) 和 [CloudFront Functions](cloudfront-functions.md)）的日志。可以使用 CloudWatch 控制台或 CloudWatch Logs API 访问日志。

**重要**  
建议您使用日志来了解内容的请求性质，而不是作为所有请求的完整描述。CloudFront 将尽力提供边缘函数日志。特定请求的日志条目可能会在实际处理该请求之后很久才进行传输，而且极少数情况下，可能根本不会传输日志条目。当边缘函数日志中省略了日志条目时，边缘函数日志中的条目数将与 AWS 账单和使用率报告中出现的使用率不匹配。

**Topics**
+ [Lambda@Edge 日志](#lambda-at-edge-logs)
+ [CloudFront Functions 日志](#cloudfront-function-logs)

## Lambda@Edge 日志
<a name="lambda-at-edge-logs"></a>

Lambda@Edge 会自动将函数日志发送到 CloudWatch Logs，并在调用函数的 AWS 区域中创建日志流。在 AWS Lambda 中创建或修改函数时，您可以使用默认 CloudWatch 日志组名称或自定义该名称。
+ 默认日志组名称为 `/aws/lambda/<FunctionName>`，其中 `<FunctionName>` 是您在创建函数时指定的名称。向 CloudWatch 发送日志时，Lambda@Edge 会自动向函数名称中添加 `us-east-1` 前缀，因此日志组名称为 `/aws/lambda/us-east-1.<FunctionName>`。此前缀对应于在其中创建函数的 AWS 区域。此前缀保持为日志组名称的一部分，即使在调用该函数的其它区域中也是如此。
+ 如果您指定自定义日志组名称（例如 `/MyLogGroup`），Lambda@Edge 将不会添加区域前缀。该日志组名称在调用该函数的所有其它区域中保持不变。

**注意**  
如果您创建自定义日志组并指定与默认 `/aws/lambda/<FunctionName>` 相同的名称，则 Lambda@Edge 会向函数名称中添加 `us-east-1` 前缀。

除了自定义日志组名称外，Lambda@Edge 函数还支持 JSON 和纯文本日志格式以及日志级别筛选。有关更多信息，请参阅《AWS Lambda 开发人员指南》**中的[为 Lambda 函数配置高级日志记录控件](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-advanced.html)。

**注意**  
Lambda@Edge 会基于请求量和日志大小来限制日志。

您必须查看正确的 区域中的 CloudWatch 日志文件，才能查看 Lambda@Edge 函数日志文件。要查看 Lambda@Edge 函数运行的区域，请在 CloudFront 控制台上查看此函数的指标图表。指标针对各个 区域显示。在同一页上，您可以选择一个区域，然后查看该区域的日志文件以调查问题。

要了解有关如何将 CloudWatch Logs 与 Lambda@Edge 函数结合使用的更多信息，请参阅以下主题：
+ 有关在 CloudFront 控制台的**监控**部分中查看图表的更多信息，请参阅[使用 Amazon CloudWatch 监控 CloudFront 指标](monitoring-using-cloudwatch.md)。
+ 有关向 CloudWatch Logs 发送数据所需的权限的信息，请参阅[设置 Lambda@Edge 的 IAM 权限和角色](lambda-edge-permissions.md)。
+ 有关向 Lambda@Edge 函数添加日志记录的信息，请参阅《AWS Lambda 开发人员指南》** 中的 [Node.js 中的 AWS Lambda 函数日志记录](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-logging.html)或 [Python 中的 AWS Lambda 函数日志记录](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html)。
+ 有关 CloudWatch 日志配额（以前称为限制）的信息，请参阅《Amazon CloudWatch Logs 用户指南》**中的 [CloudWatch Logs 配额](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)。

## CloudFront Functions 日志
<a name="cloudfront-function-logs"></a>

如果 CloudFront 函数的代码包含 `console.log()` 语句，CloudFront Functions 会将这些日志行自动发送到 CloudWatch Logs。如果没有 `console.log()` 语句，则不会发送任何内容到 CloudWatch Logs 中。

CloudFront Functions 始终在美国东部（弗吉尼亚州北部）区域 (`us-east-1`) 中创建日志流，无论哪个边缘站点运行该函数。日志流名称的格式为 `YYYY/M/D/UUID`。

日志组名称使用以下格式：
+ 对于缓存行为级别的 CloudFront Functions，格式为 `/aws/cloudfront/function/<FunctionName>`
+ 对于分配级别的 CloudFront Functions（连接函数），格式为 `/aws/cloudfront/connection-function/<FunctionName>`

`<FunctionName>` 是您在创建函数时为函数指定的名称。

**Example 查看器请求**  
下面显示了发送到 CloudWatch Logs 的示例日志消息。每行都以唯一标识 CloudFront 请求的 ID 开头。消息以包含 CloudFront 分配 ID 的 `START` 行开头，以 `END` 行结尾。`START` 与 `END` 行之间是 `console.log()` 语句在函数中生成的日志行。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADAXZZ
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== Example function log output
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**Example 连接请求**  
下面显示了发送到 CloudWatch Logs 的示例日志消息。每行都以唯一标识 CloudFront 请求的 ID 开头。消息以包含 CloudFront 分配 ID 的 `START` 行开头，以 `END` 行结尾。`START` 与 `END` 行之间是 `console.log()` 语句在函数中生成的日志行。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADA123
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== 1.2.3.4
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**注意**  
CloudFront Functions 仅为处理生产请求和响应而运行的 `LIVE` 阶段中的函数向 CloudWatch 发送日志。[测试函数](test-function.md)时，CloudFront 不会向 CloudWatch 发送任何日志。测试输出包含有关错误、计算利用率和函数日志（`console.log()` 语句）的信息，但这些信息不会发送到 CloudWatch。

CloudFront Functions 使用 AWS Identity and Access Management (IAM) [服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)将日志发送到您的账户中的 CloudWatch Logs。服务相关角色是一种与 AWS 服务直接关联的 IAM 角色。服务相关角色由服务预定义，包括服务为您调用其它 AWS 服务所需的所有权限。CloudFront Functions 使用 **AWSServiceRoleForCloudFrontLogger** 服务相关角色。有关此角色的更多信息，请参阅[Lambda@Edge 的服务相关角色](lambda-edge-permissions.md#using-service-linked-roles-lambda-edge)（Lambda@Edge 使用同一个服务相关角色）。

当函数失败并出现验证错误或执行错误时，信息将记录在[标准日志](AccessLogs.md)和[实时访问日志](real-time-logs.md)中。有关错误的具体信息，请参阅 `x-edge-result-type`、`x-edge-response-result-type` 和 `x-edge-detailed-result-type` 字段。