Postgres内部日志轮换机制可以删除早于特定时间的日志文件吗?


9

我正在使用posgtres的内部日志旋转机制。我希望删除30天以上的日志文件。我如何获得postgres来做到这一点?如果postgres不支持它,是否可以将logrotate设置为仅删除30天以上的日志?

我当前的配置是:

log_destination = 'stderr'             
logging_collector = on
log_directory = 'pg_log'                
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 
#log_truncate_on_rotation = off 
log_rotation_age = 1440         
log_rotation_size = 0    

Answers:


5

我不相信Postgres日志记录机制支持这种清理,但是只要您不弄乱Postgres写入的活动日志文件,您就可以绝对安全地使用logrotate或cron作业删除旧日志。

对于Postgres日志记录,我通常更喜欢登录到syslog并让常规的日志轮换过程完成它们的工作。这有一些优点,但是两个主要优点是能够使用与其他守护程序相同的方式使用标准日志轮换过程(例如logrotate),并且能够使syslog守护程序将日志发送到远程主机(如果有)那是您一天想要做的事情。

其他选项在Postgres手册的23.3节中进行了讨论(尽管很简短)。


1

如果您不使用syslog,则可以从cron运行以下脚本并每天调用它。

#!/bin/sh

HOME=/var/lib/pgsql
export HOME
PGDATA=/var/lib/pgsql/9.1/data
export PGDATA

/usr/bin/find $PGDATA/pg_log -type f -ctime +30 -name "*.log" -exec /bin/rm {} \;

通过不登录到系统日志,您还可以使用pgAdmin或pgFouine之类的工具来查看/分析数据库日志。


pgFouine是导致我走这条路的原因。您可以从syslog日志中使用pgFouine,但是要进行正确设置还需要更多工作。
Freiheit,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.