

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 日志
<a name="gg-cli-logs"></a>

使用 `logs` 命令分析核心设备上的 Greengrass 日志。

**子命令**
+ [get](#logs-get)
+ [list-keywords](#logs-list-keywords)
+ [list-log-files](#logs-list-log-files)

## get
<a name="logs-get"></a>

收集、筛选和可视化 Greengrass 日志文件。此命令仅支持 JSON 格式的日志文件。您可以在核心配置中指定[日志记录格式](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-logging-format)。

**摘要**  

```
greengrass-cli logs get
    [--log-dir path/to/a/log/folder]
    [--log-file path/to/a/log/file]
    [--follow true | false ]
    [--filter <filter> ]
    [--time-window <start-time>,<end-time> ]
    [--verbose ]
    [--no-color ]
    [--before <value> ]
    [--after <value> ]
    [--syslog ]
    [--max-long-queue-size <value> ]
```

**参数**：  
+ `--log-dir`，`-ld`。用于检查日志文件的目录路径，例如 **`/greengrass/v2`/logs**。请勿与 `--syslog` 一起使用。每个要指定的其它目录均需使用单独的参数。您必须使用 `--log-dir` 或 `--log-file` 中的至少一个。您也可以在一个命令中同时使用这两个参数。
+ `--log-file`，`-lf`。您要使用的日志目录的路径。每个要指定的其它目录均需使用单独的参数。您必须使用 `--log-dir` 或 `--log-file` 中的至少一个。您也可以在一个命令中同时使用这两个参数。
+ `--follow`，`-fol`。显示发生的日志更新。Greengrass CLI 继续运行并读取指定日志。如果您指定时间窗口，则 Greengrass CLI 会在所有时间窗口结束后停止监控日志。
+ `--filter`，`-f`。用作筛选条件的关键字、正则表达式或键值对。以字符串、正则表达式或键值对的形式提供该值。每个要指定的其它筛选条件均需使用单独的参数。

  评估后，在单个参数中指定的多个筛选条件使用 OR 运算符分隔，而在其它参数中指定的筛选条件则用 AND 运算符组合。例如，如果您的命令包含 `--filter "installed" --filter "name=alpha,name=beta"`，则 Greengrass CLI 将筛选并显示同时包含关键字 `installed`和值为 `alpha` 或 `beta` 的键 `name` 的日志消息。
+ `--time-window`，`-t`。显示日志信息的时间窗口。您可以同时使用精确的时间戳和相对偏移量。必须以 `<begin-time>,<end-time>` 格式提供此信息。如果您未指定开始时间或结束时间，则该选项的值将默认为当前的系统日期和时间。每个要指定的其它时间窗口均需使用单独的参数。

  Greengrass CLI 支持以下格式的时间戳：
  + `yyyy-MM-DD`，例如 `2020-06-30`。使用此格式时，时间默认为 00:00:00。

    `yyyyMMDD`，例如 `20200630`。使用此格式时，时间默认为 00:00:00。

    `HH:mm:ss`，例如 `15:30:45`。使用此格式时，日期默认为当前系统日期。

    `HH:mm:ssSSS`，例如 `15:30:45`。使用此格式时，日期默认为当前系统日期。

    `YYYY-MM-DD'T'HH:mm:ss'Z'`，例如 `2020-06-30T15:30:45Z`。

    `YYYY-MM-DD'T'HH:mm:ss`，例如 `2020-06-30T15:30:45`。

    `yyyy-MM-dd'T'HH:mm:ss.SSS`，例如 `2020-06-30T15:30:45.250`。

  相对偏移量指定偏移当前系统时间的时间段。Greengrass CLI 支持以下格式的相对偏移量：`+|-[<value>h|hr|hours][valuem|min|minutes][value]s|sec|seconds`

  例如，以下参数用于指定当前时间之前的 1 小时到 2 小时 15 分钟之间的时间窗口：`--time-window -2h15min,-1hr`。
+ `--verbose`。显示日志消息中的所有字段。请勿与 `--syslog` 一起使用。
+ `--no-color`，`-nc`。移除颜色编码。日志消息的默认颜色编码使用红色粗体文本。由于使用 ANSI 转义序列，因此仅支持 Unix 类终端。
+ `--before`，`-b`。在匹配的日志条目之前显示的行数。默认值为 0。
+ `--after`，`-a`。在匹配的日志条目之后显示的行数。默认值为 0。
+ `--syslog`。使用 RFC3164 定义的系统日志协议处理所有日志文件。请勿与 `--log-dir` 和 `--verbose` 一起使用。系统协议使用以下格式：`"<$Priority>$Timestamp $Host $Logger ($Class): $Message"`如果您未指定日志文件，则 Greengrass CLI 会从以下位置读取日志消息：`/var/log/messages`、`/var/log/syslog` 或 `/var/log/system.log`。

  AWS IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。
+ `--max-log-queue-size`，`-m`。分配给内存的最大日志条目数量。使用此选项可优化内存使用情况。默认值为 100。

**输出**：  
下面的示例显示运行此命令时产生的输出。  

```
$ sudo greengrass-cli logs get --verbose \
    --log-file /greengrass/v2/logs/greengrass.log \
    --filter deployment,serviceName=DeploymentService \
    --filter level=INFO \
    --time-window 2020-12-08T01:11:17,2020-12-08T01:11:22

2020-12-08T01:11:17.615Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.DeploymentService: Current deployment finished. {DeploymentId=44d89f46-1a29-4044-ad89-5151213dfcbc, serviceName=DeploymentService, currentState=RUNNING}
2020-12-08T01:11:17.675Z [INFO] (pool-2-thread-14) com.aws.greengrass.deployment.IotJobsHelper: Updating status of persisted deployment. {Status=SUCCEEDED, StatusDetails={detailed-deployment-status=SUCCESSFUL}, ThingName=MyThing, JobId=22d89f46-1a29-4044-ad89-5151213dfcbc
```

## list-keywords
<a name="logs-list-keywords"></a>

显示可用于筛选日志文件的建议关键字。

**摘要**  

```
greengrass-cli logs list-keywords [arguments]
```

**参数**：  
无

**输出**：  
下面的示例显示运行此命令时产生的输出。  

```
$ sudo greengrass-cli logs list-keywords

Here is a list of suggested keywords for Greengrass log:
level=$str
thread=$str
loggerName=$str
eventType=$str
serviceName=$str
error=$str
```

```
$ sudo greengrass-cli logs list-keywords --syslog

Here is a list of suggested keywords for syslog:
priority=$int
host=$str
logger=$str
class=$str
```

## list-log-files
<a name="logs-list-log-files"></a>

显示位于指定目录中的日志文件。

**摘要**  

```
greengrass-cli logs list-log-files [arguments]
```

**参数**：  
`--log-dir`，`-ld`。用于检查日志文件的目录路径。

**输出**：  
下面的示例显示运行此命令时产生的输出。  

```
$ sudo greengrass-cli logs list-log-files -ld /greengrass/v2/logs/

/greengrass/v2/logs/aws.greengrass.Nucleus.log
/greengrass/v2/logs/main.log
/greengrass/v2/logs/greengrass.log
Total 3 files found.
```