

# RDS for PostgreSQL 中的日志记录参数
日志记录参数

您可以通过修改各种参数来自定义 RDS for PostgreSQL 数据库实例的日志记录行为。在下表中，您可以找到影响日志存储时间长度、何时轮换日志和是否以 CSV（逗号分隔值）格式输出日志的参数。您还可以找到发送到 STDERR 的文本输出以及其他设置。要更改可修改的参数的设置，请为以下项目使用自定义数据库参数组： RDS for PostgreSQL 实例。有关更多信息，请参阅。[Amazon RDS 数据库实例的数据库参数组](USER_WorkingWithDBInstanceParamGroups.md)


| 参数 | 默认值 | 说明 | 
| --- | --- | --- | 
| log\$1destination | stderr | 设置日志的输出格式。原定设置为 `stderr`，但您也可以通过向设置中添加 `csvlog` 来指定逗号分隔值（CSV）。有关更多信息，请参阅 [设置日志目标（`stderr`、`csvlog`）](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)。 | 
| log\$1filename |  postgresql.log.%Y-%m-%d-%H  | 指定日志文件名的模式。除原定设置外，此参数还支持使用 `postgresql.log.%Y-%m-%d` 和 `postgresql.log.%Y-%m-%d-%H%M` 作为文件名模式。 | 
| log\$1line\$1prefix | %t:%r:%u@%d:[%p]: | 为写入 `stderr` 的每个日志行定义前缀，以记录时间（%t）、远程主机（%r）、用户（%u）、数据库（%d）和进程 ID（%p）。 | 
| log\$1rotation\$1age | 60 | 此分钟数后，将自动轮换日志文件。您可以在 1 到 1440 分钟的范围内更改此值。有关更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| log\$1rotation\$1size | – | 日志自动轮换的大小（kB）。原定设置情况下，不使用此参数，因为日志是根据 `log_rotation_age` 参数轮换的。要了解更多信息，请参阅[设置日志文件轮换](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)。 | 
| rds.log\$1retention\$1period | 4320 | 超过指定分钟数的 PostgreSQL 日志将被删除。默认值为 4320 分钟，表示系统将在 3 天后删除日志文件。有关更多信息，请参阅 [设置日志保留期](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)。 | 

要识别应用程序问题，您可以在日志中查找查询失败、登录失败、死锁和致命的服务器错误。例如，假设您将旧版应用程序从 Oracle 转换为 Amazon RDS PostgreSQL，但部分查询可能未正确转换。这些格式不正确的查询会生成错误消息，您可以在日志中找到这些错误消息以帮助识别问题。有关日志记录查询的更多信息，请参阅 [为您的 RDS for PostgreSQL 数据库实例开启查询日志记录](USER_LogAccess.Concepts.PostgreSQL.Query_Logging.md)。

在以下主题中，您可以找到有关如何设置各种参数（用于控制 PostgreSQL 日志的基本详细信息）的信息。

**Topics**
+ [

## 设置日志保留期
](#USER_LogAccess.Concepts.PostgreSQL.log_retention_period)
+ [

## 设置日志文件轮换
](#USER_LogAccess.Concepts.PostgreSQL.log_rotation)
+ [

## 设置日志目标（`stderr`、`csvlog`）
](#USER_LogAccess.Concepts.PostgreSQL.Log_Format)
+ [

## 了解 log\$1line\$1prefix 参数
](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)

## 设置日志保留期


`rds.log_retention_period` 参数指定 RDS for PostgreSQL 数据库实例将其日志文件保留多长时间。原定设置为 3 天（4320 分钟），但您可以将此值设置为 1 天（1440 分钟）到 7 天（10080 分钟）之间的任意值。确保您的 RDS for PostgreSQL 数据库实例具有足够的存储空间，可将日志文件保留一段时间。

建议您将日志定期发布到 Amazon CloudWatch Logs，以便您可以在日志从 RDS for PostgreSQL 数据库实例中删除很久之后查看和分析系统数据。有关更多信息，请参阅 [将 PostgreSQL 日志发布到 Amazon CloudWatch Logs](USER_LogAccess.Concepts.PostgreSQL.md#USER_LogAccess.Concepts.PostgreSQL.PublishtoCloudWatchLogs)。

## 设置日志文件轮换


原定设置情况下，Amazon RDS 每小时都会创建新的日志文件。计时由 `log_rotation_age` 参数控制。此参数的原定设置值为 60（分钟），但您可以将其设置为 1 分钟到 24 小时（1440 分钟）之间的任意值。轮换时，系统将创建一个新的不同日志文件。该文件根据 `log_filename` 参数指定的模式命名。

也可以根据日志文件的大小进行轮换（如 `log_rotation_size` 参数指定）。此参数指定在日志达到指定的大小（以千字节为单位）时应轮换日志。对于 RDS for PostgreSQL 数据库实例，`log_rotation_size` 未设置，也就是说，未指定任何值。但是，您可以将该参数设置为 0-2097151KB（千字节）之间。

日志文件名基于在 `log_filename` 参数中指定的文件名模式。此参数的可用设置如下：
+ `postgresql.log.%Y-%m-%d` – 日志文件名的原定设置格式。在日志文件的名称中包括年、月和日。
+ `postgresql.log.%Y-%m-%d-%H` – 在日志文件名格式中包含小时。

有关更多信息，请参阅 PostgreSQL 文档中的 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-AGE) 和 [https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-LOG-ROTATION-SIZE)。

## 设置日志目标（`stderr`、`csvlog`）


默认情况下，Amazon RDS PostgreSQL 以标准错误 (stderr) 格式生成日志。此格式是 `log_destination` 参数的原定设置。每条消息都使用在 `log_line_prefix` 参数中指定的模式作为前缀。有关更多信息，请参阅 [了解 log\$1line\$1prefix 参数](#USER_LogAccess.Concepts.PostgreSQL.Log_Format.log-line-prefix)。

RDS for PostgreSQL 也可以按 `csvlog` 格式生成日志。`csvlog` 用于将日志数据作为逗号分隔值（CSV）数据进行分析。例如，假设您使用 `log_fdw` 扩展将日志作为外部表处理。在 `stderr` 日志文件上创建的外部表包含一个列，其中包含日志事件数据。通过向 `csvlog` 参数添加 `log_destination`，可以获得 CSV 格式的日志文件，其中对外部表的多个列进行了分界。您现在可以更轻松地对日志进行排序和分析。要了解如何将 `log_fdw` 与 `csvlog` 结合使用，请参阅 [使用 log\$1fdw 扩展通过 SQL 访问数据库日志](CHAP_PostgreSQL.Extensions.log_fdw.md)。

如果您为此参数指定 `csvlog`，请注意将同时生成 `stderr` 和 `csvlog` 文件。确保监控日志所占用的存储空间，同时考虑 `rds.log_retention_period` 以及影响日志存储和周转的其他设置。使用 `stderr` 和 `csvlog` 会使日志占用的存储空间增加一倍以上。

如果将 `csvlog` 添加到 `log_destination` 并想单独恢复到 `stderr`，则需要重置参数。为此，请打开 Amazon RDS 控制台，然后为您的实例打开自定义数据库参数组。选择 `log_destination` 参数，选择 **Edit parameter**（编辑参数），然后选择 **Reset**（重置）。

有关配置日志记录的更多信息，请参阅[使用 Amazon RDS 和 Aurora PostgreSQL 日志：第 1 部分](https://www.amazonaws.cn/blogs/database/working-with-rds-and-aurora-postgresql-logs-part-1/)。

## 了解 log\$1line\$1prefix 参数


`stderr` 日志格式将由 `log_line_prefix` 参数指定的详细信息作为每条日志消息的前缀。默认值为：

```
%t:%r:%u@%d:[%p]:t
```

从 Aurora PostgreSQL 版本 16 开始，还可以选择：

```
%m:%r:%u@%d:[%p]:%l:%e:%s:%v:%x:%c:%q%a
```

发送到 stderr 的每个日志条目都包含以下基于所选值的信息：
+ `%t`：日志条目的时间，不带毫秒
+ `%m`：日志条目的时间，带毫秒
+  `%r` – 远程主机地址
+  `%u@%d` – 用户名 @ 数据库名称
+  `[%p]` – 进程 ID（如果有）
+  `%l`：每个会话的日志行号 
+  `%e`：SQL 错误代码 
+  `%s`：进程开始时间戳 
+  `%v`：虚拟事务 ID 
+  `%x`：事务 ID 
+  `%c`：会话 ID 
+  `%q`：非会话终止器 
+  `%a`：应用程序名称 