1

在我的postgresql.conf文件中,我有以下设置

logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
log_rotation_size = 10

但是我的日志文件在 10 KB 后没有被截断。请帮忙。

4

1 回答 1

4

日志截断不会发生,因为postgres有一种保护措施可以避免截断与当前登录的日志文件相同的日志文件。否则,这将意味着丢失最新的日志条目,这似乎是不可取的。事实上,文档上log_truncate_on_rotation说:

但是,仅当由于基于时间的轮换而打开新文件时才会发生截断,而不是在服务器启动或基于大小的轮换期间

为了解决这个问题,您应该log_filename从更改'postgresql-%a.log'为时间粒度与log_rotation_size. 举个例子:

log_filename = postgresql-%a-%H.log

使用这些设置,log_truncate_on_rotation如果碰巧存在相同的应用程序名称,其目的是覆盖前一天同一时间的日志。

我假设您只是在测试日志轮换功能,因为实际上10Kb它太小而无用,并且覆盖以前的日志在生产使用中是可疑的。如果您对日志的大小有严格的限制,您应该将 postgres 完成的日志文件切换与外部 cron 作业结合起来,该作业会积极删除旧日志,而不是仅依赖log_truncate_on_rotation.

于 2013-09-26T14:35:37.583 回答