Postgresql 日志配置
启用日志记录收集器后,必须对其进行配置,以便它将根据需要和所需的位置存储日志。实际上,您可以通过在 PostgreSQL 配置文件中为以下任何设置放置正确的值来使用以下参数来配置日志记录收集器进程:
- log_directory:这是必须存储各个日志文件的目录。它可以是相对于 的相对路径,也可以是绝对路径(进程必须能够写入)。
- log_filename:这是一个文件名或一种模式,用于指定每个日志文件的名称(在 中)。可以在下面指定模式,以使用日期和时间设置其格式。例如,该值将生成一个包含日期(分别为年、月和日)的日志文件名,例如 .log_directorystrftime(3)postgresql-%Y-%m-%d.logpostgresql-2020-04-17.log
- log_rotation_age:这表示日志在应用自动日志轮换之前应等待多长时间。例如,表示 1 天,并指定日志将每天轮换一次。
- log_rotation_size:这指定日志文件在旋转到新日志文件之前的大小。
使用上述设置,文件中的日志记录配置将如下所示:postgresql.conf
log_destination = 'stderr'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_rotation_age = '1d'
log_rotation_size = '100MB'
何时记录
决定何时必须在日志中报告事件非常重要。有很多选项可用于控制日志操作的触发,这些操作通过阈值指定。日志记录阈值可以假定一个助记符值,该值指示日志事件将插入日志中的最小值。
最常见的值依次为info、notice、warning、error、log、fatal和panic,其中info为最小值,fatal为最高值。
有两个参数可用于调整日志阈值:log_min_messages 和 client_min_messages
前者决定日志记录系统的阈值,而后者决定每个新用户连接的阈值
- log_min_messages:指定群集必须插入到日志中的内容,而不考虑传入用户连接及其设置。
- client_min_messages:决定客户端在连接期间必须向用户报告哪些日志事件。这两个设置都可以采用上述阈值列表中的值。
开发或测试环境的典型用例:
log_min_messages = 'info'
client_min_messages = 'debug1'
使用上述配置,群集将仅将信息消息记录在文本日志中,这与进程的正常执行有关,而传入的用户连接将向用户报告更详细的消息(如开发消息)。
设置阈值并不是决定何时触发日志插入的唯一方法:还有另外几个设置可用于处理语句和实用程序的持续时间。例如,log_min_duration_statement 在日志中插入运行时间超过指定时间(以毫秒为单位)的 SQL 语句的文本表示形式。 log_autovacuum_min_duration 记录花费的时间超过指定毫秒数的自动清除操作。
决定何时记录活动的另一个非常重要的参数是 。此设置是在 PostgreSQL 12 中引入的,它以采样率记录显式事务中的每个语句。采样率是介于 0(无采样)和 1(完全采样)之间的值,因此是以下值:log_transaction_sample_rate0.5
这将记录来自两个显式事务中的每个语句。作为另一个示例,请考虑将其设置为非常低的值,如下所示:log_transaction_sample_rate = 0.01
完整实例演示
我们将创建一个名为 logging.conf 的补充配置文件,而不是就地修改主文件(postgresql.conf),该文件将包含在主集群配置文件中。通过这种方式,我们将能够切换回原始日志记录配置,或者通过简单地复制新文件在其他系统上复制它
该文件将包含以下内容:
log_destination = 'stderr'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_rotation_age = '1d'
log_rotation_size = '100MB'
log_line_prefix = '%t [%p]: [%l] user=%u,db=%d,app=%a,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
为了激活上述设置,我们需要在文件末尾插入以下配置行:postgresql.conf
include_if_exists='logging.conf'
配置完成后重启postgresql即可!