在postgresql.conf文件中设置参数(日志文件未被截断)

时间:2013-09-26 13:17:46

标签: postgresql

在我的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后没有被截断。请帮忙。

1 个答案:

答案 0 :(得分:3)

日志截断不会发生,因为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