

# 为 AWS IoT Wireless 资源配置日志记录
<a name="configure-resource-logging"></a>

要为 AWS IoT Wireless 资源配置日志记录，您可以使用 API 或 CLI。开始监控 AWS IoT Wireless 资源时，您可以使用原定设置配置。若要执行该操作，您可以跳过此主题，然后继续执行 [使用 CloudWatch Logs 监控 AWS IoT Wireless](cloud-watch-logs.md) 来监控您的日志。

开始监控日志后，您可以使用 CLI 将日志级别更改为更详细的选项，例如提供 `INFO` 和 `ERROR` 信息并为更多资源启用日志记录。

## AWS IoT Wireless 资源和日志级别
<a name="log-levels-resources"></a>

在使用 API 或 CLI 之前，请使用下表了解可以为其配置日志记录的不同日志级别和资源。该表显示了您在监控资源时能在 CloudWatch Logs 中看到的参数。如何为资源配置日志记录将决定您会在控制台中看到的日志。

有关 CloudWatch Logs 示例以及如何使用这些参数记录有关 AWS IoT Wireless 资源有关有用信息的内容，请参阅 [查看 CloudWatch AWS IoT Wireless 日志条目](cwl-format.md)。


**日志级别和资源**  

| 名称 | 可能的值 | 描述 | 
| --- | --- | --- | 
| logLevel |  `INFO`、`ERROR` 或 `DISABLED`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/iot-wireless/latest/developerguide/configure-resource-logging.html)  | 
| resource |  `WirelessGateway` 或 `WirelessDevice`  |  资源类型，可以是 `WirelessGateway` 或 `WirelessDevice`。  | 
| wirelessGatewayType | LoRaWAN | 无线网关的类型，当 resource 为 WirelessGateway 时，始终为 LoRaWAN。 | 
| wirelessDeviceType | LoRaWAN 或 Sidewalk | 无线设备的类型，当 resource 为 WirelessDevice 时，可以是 LoRaWAN 或者 Sidewalk。 | 
| wirelessGatewayId | - | 无线网关的标识符，当 resource 为 WirelessGateway 时。 | 
| wirelessDeviceId | - | 无线设备的标识符，当 resource 为 WirelessDevice 时。 | 
| event | Join、Rejoin、Registration、Uplink\$1data、Downlink\$1data、CUPS\$1Request 和 Certificate | 记录的事件类型，取决于您记录的资源是无线设备还是无线网关。有关更多信息，请参阅[查看 CloudWatch AWS IoT Wireless 日志条目](cwl-format.md)。 | 

## AWS IoT Wireless 日志记录 API
<a name="logging-api-roles"></a>

您可以通过以下 API 操作来配置资源日志记录。该表还显示了您必须为使用 API 操作创建的示例 IAM 策略。以下部分介绍如何使用 API 配置资源的日志级别。


**对 API 操作进行日志记录**  

| API 名称 | 描述 | IAM 策略示例 | 
| --- | --- | --- | 
|  [GetLogLevelsByResourceTypes](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetLogLevelsByResourceTypes.html)  |  返回当前默认日志级别，或按资源类型返回日志级别，其中可以包括无线设备或无线网关的日志选项。  | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:GetLogLevelsByResourceTypes"            <br />            ],            <br />            "Resource": [                <br />                "*"            <br />            ]        <br />        }<br />    ]<br />}</pre>  | 
|  [GetResourceLogLevel](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetResourceLogLevel.html)  | 返回给定资源标识符和资源类型的日志级别覆盖。资源可以是无线设备或无线网关。  | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:GetResourceLogLevel"            <br />            ],            <br />            "Resource": [                <br />                 "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/012bc537-ab12-cd3a-d00e-1f0e20c1204a",           <br />            ]        <br />        }<br />    ]<br />}</pre> | 
|  [PutResourceLogLevel](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_PutResourceLogLevel.html)  | 为给定资源标识符和资源类型设置日志级别覆盖。资源可以是无线网关或无线设备。  此 API 每个账户限制 200 个日志级别覆盖。   | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:PutResourceLogLevel"            <br />            ],            <br />            "Resource": [                <br />                "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/012bc537-ab12-cd3a-d00e-1f0e20c1204a",            <br />            ]        <br />        }<br />    ]<br />}</pre> | 
|  [ResetAllResourceLogLevels](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ResetAllResourceLogLevels.html)  |  删除所有资源（包括无线网关和无线设备）的日志级别覆盖。  此 API 不会影响使用 `UpdateLogLevelsByResourceTypes` API 设置的日志级别。   | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:ResetAllResourceLogLevels"            <br />            ],            <br />            "Resource": [                <br />                "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/*", <br />                "arn:aws:iotwireless:us-east-1:123456789012:WirelessGateway/*<br />            ]        <br />        }<br />    ]<br />}</pre> | 
|  [ResetResourceLogLevel](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ResetResourceLogLevel.html)  |  删除给定资源标识符和资源类型的日志级别覆盖。资源可以是无线网关或无线设备。  | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:ResetResourceLogLevel"            <br />            ],            <br />            "Resource": [                <br />                "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/012bc537-ab12-cd3a-d00e-1f0e20c1204a",            <br />            ]        <br />        }<br />    ]<br />}</pre> | 
|  [UpdateLogLevelsByResourceTypes](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateLogLevelsByResourceTypes.html)  |  设置默认日志级别，或按资源类型设置日志级别。您可以将此 API 用于无线设备或无线网关的日志选项，并控制将在 CloudWatch 中显示的日志消息。  事件是可选的，事件类型与资源类型相关联。有关更多信息，请参阅[事件和资源类型](cwl-format.md#cwl-format-events-resources)。   | <pre>{    <br />    "Version": "2012-10-17",    <br />    "Statement": [        <br />        {            <br />            "Effect": "Allow",            <br />            "Action": [                <br />                 "iotwireless:UpdateLogLevelsByResourceTypes"            <br />            ],            <br />            "Resource": [                <br />                "*"            <br />            ]        <br />        }<br />    ]<br />}</pre> | 

## 使用 CLI 配置资源的日志级别
<a name="configure-logging-api"></a>

本节介绍了如何使用 API 或 AWS CLI 配置 AWS IoT Wireless 资源的日志级别。

**使用 CLI 之前：**
+ 请确保为要为其运行 CLI 命令的 API 创建了 IAM 策略，如前所述。
+ 您需要提供要使用角色的 Amazon Resource Name (ARN)。如果需要创建用于日志记录的角色，请参阅 [为 AWS IoT Wireless 创建日志记录角色和策略](create-logging-role-policy.md)。

**为什么要使用 AWS CLI**  
预设情况下，如果您如 [为 AWS IoT Wireless 创建日志记录角色和策略](create-logging-role-policy.md) 中所述创建 IAM 角色，`IoTWirelessLogsRole`，您将在默认日志级别为 `ERROR` 的 AWS 管理控制台 中看到 CloudWatch Logs。要更改所有资源或特定资源的原定设置日志级别，请使用 AWS IoT Wireless 无线日志记录 API 或 CLI。

**如何使用 AWS CLI**  
API 操作可分为以下类型，具体取决于您是要为所有资源配置日志级别还是为特定资源配置日志级别：
+ API 操作`GetLogLevelsByResourceTypes` 和 `UpdateLogLevelsByResourceTypes` 可以为您账户中特定类型的所有资源检索和更新日志级别，例如无线网关或 LoRaWAN 或 Sidewalk 设备。
+ API 操作 `GetResourceLogLevel`、`PutResourceLogLevel` 和 `ResetResourceLogLevel` 可以检索、更新和重置您使用资源标识符指定的各个资源的日志级别。
+ 对于您使用 `PutResourceLogLevel` API 指定日志级别覆盖操作的所有资源， API 操作 `ResetAllResourceLogLevels` 会将日志级别覆盖重置为 `null`。

**使用 CLI 为 AWS IoT 配置资源特定的日志记录**
**注意**  
您也可以使用 API 执行此流程，即使用 AWS API 中与此处显示的 CLI 命令对应的方法。

1. 预设情况下，所有资源的日志级别都设置为 `ERROR`。要为账户中的所有资源设置默认日志级别或按资源类型设置日志级别，请使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/update-log-levels-by-resource-types.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/update-log-levels-by-resource-types.html) 命令。以下示例显示如何创建 JSON 文件 `Input.json`，并将其作为 CLI 命令的输入提供。您可以使用此命令有选择地禁用特定类型的资源和时间的日志记录或覆盖默认日志级别。

   ```
   {
       "DefaultLogLevel": "INFO",
       "WirelessDeviceLogOptions": 
        [
           {
            "Type": "Sidewalk",
            "LogLevel": "INFO",
            "Events": 
             [
               {
                 "Event": "Registration",
                 "LogLevel": "DISABLED"
               }
             ]
           }, 
           {
            "Type": "LoRaWAN",
            "LogLevel": "INFO",
            "Events": 
             [
               {
                "Event": "Join",
                "LogLevel": "DISABLED"
               }, 
               {
                "Event": "Rejoin",
                "LogLevel": "ERROR"
               }
             ]
           }
         ]
        "WirelessGatewayLogOptions": 
         [
           {
            "Type": "LoRaWAN",
            "LogLevel": "INFO",
            "Events": 
             [
               {
                "Event": "CUPS_Request",
                "LogLevel": "DISABLED"
               }, 
               {
                 "Event": "Certificate",
                 "LogLevel": "ERROR"
               }
             ]
           }
         ]
   }
   ```

   其中：  
**WirelessDeviceLogOptions**  
无线设备的日志选项列表。每个日志选项都包括无线设备类型（Sidewalk 或 LoRaWAN），以及无线设备事件日志选项列表。每个无线设备事件日志选项都可以选择是否包括事件类型及其日志级别。  
**WirelessGatewayLogOptions**  
无线网关的日志选项列表。每个日志选项都包括无线网关类型 (LoRaWAN) 和无线网关事件日志选项列表。每个无线网关事件日志选项都可以选择是否包括事件类型及其日志级别。  
**DefaultLogLevel**  
用于所有资源的日志级别。有效值包括 `ERROR`、`INFO` 和 `DISABLED`。默认值为 `INFO`。  
**LogLevel**  
要用于单个资源类型和事件的日志级别。这些日志级别会覆盖默认日志级别，例如适用于 LoRaWAN 的 `INFO` 网关日志级别，以及适用于两种事件类型的日志级别 `DISABLED` 和 `ERROR`。

   运行以下命令以向命令提供 `Input.json` 文件作为输入。此命令不会生成任何输出。

   ```
   aws iotwireless update-log-levels-by-resource-types \ 
       --cli-input-json Input.json
   ```

   如果要删除无线设备和无线网关的日志选项，请运行以下命令。

   ```
   {
       "DefaultLogLevel":"DISABLED",
       "WirelessDeviceLogOptions": [],
       "WireslessGatewayLogOptions":[]
   }
   ```

1. **update-log-levels-by-resource-types** 命令不返回任何输出。使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/get-log-levels-by-resource-types.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/get-log-levels-by-resource-types.html) 命令检索资源特定的日志记录信息。该命令返回默认日志级别以及无线设备和无线网关日志选项。
**注意**  
**get-log-levels-by-resource-types** 命令无法在 CloudWatch 控制台中直接检索日志级别。您可以使用 **get-log-levels-by-resource-types** 命令获取您使用 **update-log-levels-by-resource-types** 命令为资源指定的最新日志级别信息。

   ```
   aws iotwireless get-log-levels-by-resource-types 
   ```

   当您运行以下命令时，它会返回您使用 **update-log-levels-by-resource-types** 指定的最新日志记录信息。例如，如果删除无线设备日志选项，则运行 **get-log-levels-by-resource-types** 将返回此值，为 `null`。

   ```
   {
       "DefaultLogLevel": "INFO",
       "WirelessDeviceLogOptions": null,
        "WirelessGatewayLogOptions": 
         [
           {
            "Type": "LoRaWAN",
            "LogLevel": "INFO",
            "Events": 
             [
               {
                "Event": "CUPS_Request",
                "LogLevel": "DISABLED"
               }, 
               {
                 "Event": "Certificate",
                 "LogLevel": "ERROR"
               }
             ]
           }
         ]
   }
   ```

1. 要控制单个无线网关或无线设备资源的日志级别，请使用以下 CLI 命令：
   + [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/put-resource-log-level.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/put-resource-log-level.html)
   + [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/get-resource-log-level.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/get-resource-log-level.html)
   + [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/reset-resource-log-level.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/reset-resource-log-level.html)

   有关何时使用这些 CLI 的示例，假设您的账户中有大量正在记录的无线设备或网关。如果您只想排除某些无线设备的故障，可以通过将 `DefaultLogLevel` 设置为 `DISABLED` 禁用所有无线设备的日志记录，然后针对您账户中的设备，使用 **put-resource-log-level** 将 `LogLevel` 设置为 `ERROR`。

   ```
   aws iotwireless put-resource-log-level \ 
       --resource-identifier 
       --resource-type WirelessDevice
       --log-level ERROR
   ```

   在本例中，命令仅将特定无线设备资源的日志级别设置为 `ERROR`，而所有其他资源的日志均已禁用。此命令不会生成任何输出。要检索此信息并验证是否已设置日志级别，请使用 **get-resource-log-level** 命令。

1. 在上一步中，调试问题并解决错误后，您可以运行 **reset-resource-log-level** 命令将该资源的日志级别重置为 `null`。如果您使用 `put-resource-log-level` 命令为多个无线设备或网关资源设置日志级别覆盖（例如，为多个设备排除故障），您可以使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/reset-all-resource-log-levels.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotwireless/reset-all-resource-log-levels.html) 命令为所有这些资源将日志级别覆盖重置为 `null`。

   ```
   aws iotwireless reset-all-resource-log-levels
   ```

   此命令不会生成任何输出。要检索资源的日志记录信息，请运行 **get-resource-log-level** 命令。

## 后续步骤
<a name="configure-logging-next-steps"></a>

您已了解如何创建日志记录角色并使用 AWS IoT Wireless API 用于配置 适用于 LoRaWAN 的 AWS IoT Core 资源的日志记录。接下来，要了解有关监控日志条目的信息，请转到 [使用 CloudWatch Logs 监控 AWS IoT Wireless](cloud-watch-logs.md)。