21.3. 日志文件维护

把数据库服务器的日志输出保存在一个地方是个好主意, 而不是仅仅把它们放到 /dev/null 里。 在碰到危险的问题的时候,日志输出是非常宝贵的。 不过,日志输出可能很庞大(特别是在比较高的调试级别上), 而且你不会无休止地保存它们.你需要"旋转"日志文件, 这样生成新的日志文件并且经常抛弃老的.

如果你简单地把postmasterstderr定向到一个文件中, 那么截断日志文件的唯一的方法是停止并重起postmaster。 这样做对于开发环境可能是可以的,但是你肯定不想在生产环境上这么干。

最简单的生产级的管理日志输出的方法就是把它们发送给 syslog,让 syslog 处理文件旋转。 要利用这个工具,确保 PostgreSQL 制作的时候打开了 --enable-syslog 选项并且把 postgresql.conf 里的 syslog 配置参数设置为 2(只记录 syslog 日志)。 然后在你想强迫 syslog 守护进程开始写入一个新日志文件的时候, 你就可以发送一个 SIGHUP 信号给它。 如果你想自动旋转日志文件,那么我们可以配置 logrotate 程序处理 syslog 的日志文件。

不过,在很多系统上,syslog 不是非常可靠,特别是在大型日志信息的情况下; 它可能在你最需要那些信息的时候截断或者丢弃它们。 你可能会觉得把 postmasterstderr 输出给某些日志旋转脚本会更有用些。如果你用 pg_ctl 启动服务器, 那么postmasterstderr已经重定向到stdout, 因此你只需要一个管道命令:

pg_ctl start | logrotate

PostgreSQL 版本并未包含合适的日志旋转程序, 但是在网上有许多不错的,比如 Apache 就带着一个.