

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 日誌層級篩選
<a name="monitoring-cloudwatchlogs-log-level"></a>

Lambda 可以篩選函數的日誌，以便僅將特定詳細資料層級或更低層級的日誌傳送到 CloudWatch 日誌。您可以針對函數的系統日誌 (Lambda 產生的日誌) 和應用程式日誌 (函數程式碼產生的日誌) 分別設定日誌層級篩選。

對於 [支援的執行期和記錄方法](monitoring-cloudwatchlogs-logformat.md#monitoring-cloudwatchlogs-logformat-supported)，您無需對函數程式碼進行任何變更，Lambda 即可篩選函數的應用程式日誌。

對於所有其他執行期和記錄方法，您的函數程式碼必須將日誌事件輸出至 `stdout` 或 `stderr` 作為 JSON 格式的物件，其中包含與索引鍵 `"level"` 配對的索引鍵值)。例如，Lambda 會將下列輸出解譯為 `stdout` 作為 DEBUG 層級日誌檔。

```
print('{"level": "debug", "msg": "my debug log", "timestamp": "2024-11-02T16:51:31.587199Z"}')
```

如果 `"level"` 值欄位無效或遺失，Lambda 會將日誌輸出指派層級 INFO。若要讓 Lambda 使用時間戳記欄位，您必須以有效的 [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) 時間戳記格式指定時間。如果您沒有提供有效的時間戳記，Lambda 會為日誌指派層級 INFO，並為您新增時間戳記。

命名時間戳記索引鍵時，請遵循您使用的執行期慣例。Lambda 支援受管理執行期使用的大多數通用命名慣例。

**注意**  
若要使用日誌層級篩選，您的函數必須設定為使用 JSON 記錄格式。所有 Lambda 受管執行期的預設日誌格式目前都是純文字。若要瞭解如何將函數的日誌格式設定為 JSON，請參閱 [設定函數的日誌格式](monitoring-cloudwatchlogs-logformat.md#monitoring-cloudwatchlogs-set-format)。

對於應用程式日誌 (由函數程式碼生成的日誌)，您可以在以下日誌層級之間進行選擇。


| 日誌層級 | 標準用量 | 
| --- | --- | 
| TRACE (大多數詳細資訊) | 用於追蹤程式碼執行路徑的最精細資訊 | 
| DEBUG | 系統偵錯的詳細資訊 | 
| INFO | 記錄函數正常操作的訊息 | 
| WARN | 有關可能導致未解決意外行為的潛在錯誤的消息 | 
| ERROR | 有關阻止程式碼按預期執行的問題的訊息 | 
| FATAL (最少詳細資訊) | 有關導致應用程式停止運作的嚴重錯誤訊息 | 

當您選取日誌層級時，Lambda 會將該層級或更低層級的日誌傳送至 CloudWatch Logs 日誌。例如，如果您將函數的應用程式日誌層級設定為 WARN，Lambda 就不會在 INFO 和 DEBUG 層級傳送日誌輸出。日誌篩選的預設應用程式日誌層級為 INFO。

當 Lambda 篩選函數的應用程式日誌時，沒有層級的日誌訊息將被指派日誌等級 INFO。

對於系統日誌檔 (Lambda 服務產生的日誌檔)，您可以在下列日誌層級進行選擇。


| 日誌層級 | Usage | 
| --- | --- | 
| DEBUG (大多數詳細資訊) | 系統偵錯的詳細資訊 | 
| INFO | 記錄函數正常操作的訊息 | 
| WARN (最少詳細資訊) | 有關可能導致未解決意外行為的潛在錯誤的消息 | 

當您選取日誌層級時，Lambda 會在該層級 (含) 或更低層級傳送日誌。例如，如果您將函數的系統日誌層級設定為 INFO，Lambda 不會在 DEBUG 層級傳送日誌輸出。

根據預設，Lambda 會將系統日誌層級設定為 INFO。透過此設定，Lambda 會自動將 `"start"` 和 `"report"` 日誌訊息傳送到 CloudWatch。若要接收更多或更少詳細的系統日誌，請將日誌層級變更為 DEBUG 或 WARN。若要查看 Lambda 映射不同系統日誌事件的記錄層級清單，請參閱 [系統日誌層級事件映射](#monitoring-cloudwatchlogs-log-level-mapping)。

## 設定日誌層級篩選
<a name="monitoring-cloudwatchlogs-log-level-setting"></a>

若要為您的函數設定應用程式和系統日誌層級篩選，您可以使用 Lambda 主控台或 AWS Command Line Interface (AWS CLI)。您也可以使用 [CreateFunction](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunction.html) 和 [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html) Lambda API 命令、 AWS Serverless Application Model (AWS SAM) [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html) 資源和 CloudFormation [AWS::Lambda::Function](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html) 資源來設定函數的日誌層級。

請注意，如果您在程式碼中設定函數的日誌層級，此設定會優先於您的任何其他日誌層級設定。例如，如果您使用 Python `logging` `setLevel()` 方法將函數的記錄層級設定為 INFO，則此設定的優先級將高於您使用 Lambda 主控台設定的 WARN 層級。

**若要設定現有函數的應用程式或系統日誌層級 (主控台)**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇一個函數。

1. 在函數組態頁面上，選擇**監視和操作工具**。

1. 在**日誌組態**窗格中，選擇**編輯**。

1. 在**日誌內容**之下，針對**日誌檔格式**，確保已選取 **JSON**

1. 使用選項按鈕，為您的函數選擇所需的**應用程式日誌層級**和**系統日誌層級**。

1. 選擇**儲存**。

**若要設定現有函數的應用程式或系統日誌層級 (AWS CLI)**
+ 若要變更現有函數的應用程式或系統日誌層級，請使用 [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html) 命令。使用 `SystemLogLevel` 將 `--logging-config` 設定為 `DEBUG`、`INFO` 或 `WARN` 中的其中一項。設定 `ApplicationLogLevel` 為 `DEBUG`、`INFO`、`WARN`、`ERROR` 或 `FATAL` 之一。

  ```
  aws lambda update-function-configuration \
    --function-name myFunction \
    --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
  ```

**若要在建立函數時設定日誌層級篩選**
+ 若要在建立新函數時設定日誌層級篩選，請使用 [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) 命令將 `--logging-config` 設定為 `SystemLogLevel` 和 `ApplicationLogLevel` 金鑰。設定 `SystemLogLevel` 為 `DEBUG`、`INFO` 或 `WARN` 之一。設定 `ApplicationLogLevel` 為 `DEBUG`、`INFO`、`WARN`、`ERROR` 或 `FATAL` 之一。

  ```
  aws lambda create-function \
    --function-name myFunction \
    --runtime nodejs24.x \
    --handler index.handler \
    --zip-file fileb://function.zip \
    --role arn:aws:iam::123456789012:role/LambdaRole \ 
    --logging-config LogFormat=JSON,ApplicationLogLevel=ERROR,SystemLogLevel=WARN
  ```

## 系統日誌層級事件映射
<a name="monitoring-cloudwatchlogs-log-level-mapping"></a>

對於 Lambda 產生的系統層級日誌事件，以下資料表定義指派給每個事件的日誌層級。若要進一步瞭解資料表中所列事件，請參閱 [Lambda 遙測 API `Event` 結構描述參考](telemetry-schema-reference.md)


| 事件名稱 | 條件 | 指派的日誌層級 | 
| --- | --- | --- | 
| initStart | runtimeVersion已設定 | INFO | 
| initStart | runtimeVersion未設定 | DEBUG | 
| initRuntimeDone | status=success | DEBUG | 
| initRuntimeDone | status\$1=success | WARN | 
| initReport | initializationType\$1=on-demand | INFO | 
| initReport | initializationType=on-demand | DEBUG | 
| initReport | status\$1=success | WARN | 
| restoreStart | runtimeVersion已設定 | INFO | 
| restoreStart | runtimeVersion未設定 | DEBUG | 
| restoreRuntimeDone | status=success | DEBUG | 
| restoreRuntimeDone | status\$1=success | WARN | 
| restoreReport | status=success | INFO | 
| restoreReport | status\$1=success | WARN | 
| 入門 | - | INFO | 
| runtimeDone | status=success | DEBUG | 
| runtimeDone | status\$1=success | WARN | 
| 報告 | status=success | INFO | 
| 報告 | status\$1=success | WARN | 
| 副檔名 | state=success | INFO | 
| 副檔名 | state\$1=success | WARN | 
| logSubscription | - | INFO | 
| telemetrySubscription | - | INFO | 
| logsDropped | - | WARN | 

**注意**  
[使用遙測 API 即時存取延伸功能的遙測資料](telemetry-api.md) 始終發出一組完整的平台事件。設定 Lambda 傳送至 CloudWatch 的系統日誌層級不會影響 Lambda 遙測 API 行為。

## 使用自訂執行期的應用程式日誌層級篩選
<a name="monitoring-cloudwatchlogs-log-level-custom"></a>

當您為函數設定應用程式日誌層級篩選時，Lambda 會在幕後使用 `AWS_LAMBDA_LOG_LEVEL` 環境變數在執行期設定應用程式日誌層級。Lambda 也會使用 `AWS_LAMBDA_LOG_FORMAT` 環境變數來設定函數的日誌格式。您可以使用這些變數，將 Lambda 進階日誌控制項整合至[自訂執行期](runtimes-custom.md)。

若要透過 Lambda 主控台 AWS CLI和 Lambda APIs 使用自訂執行期來設定函數的記錄設定，請設定您的自訂執行期來檢查這些環境變數的值。然後，您可以根據您選取的日誌格式和日誌層級來設定執行期的日誌程式。