21.3. ログファイルの保守

データベースサーバのログ出力を /dev/null に渡してしまうのではなく、どこかに保存しておくことを推奨します。 問題の原因を究明する時にログ出力は貴重です。 しかし、ログ出力は (特により高いデバッグレベルの時に) 巨大になりがちですので、際限なく保存したくはないでしょう。 新しいログファイルを開始させ、古いログファイルを捨ててしまうために、度々ログファイルを "回転" させる必要があります。

単にpostmasterstderr をファイルに落しているのであれば、ログファイルを切り詰める方法は、postmasterを停止し、再度起動することだけです。 これは、開発段階では問題ありませんが、実運用のサーバではこの方法で動作させないでしょう。

実運用レベルの最も簡単なログ出力の管理方法は、syslog に全てを送信し、syslog にファイルの回転を行なわせることです。 このためには、postgresql.conf 内で syslog を 2 (syslog にのみログを出力) に設定して下さい。 そして、新しいログファイルへの書き込みを始めたい時に、syslog デーモンに SIGHUPを送信して下さい。 ログ回転を自動化させたい場合は、logrotateプログラムを設定することで、syslogからのログファイルを扱うことができます。

しかし、多くのシステムでは、特に巨大なログメッセージでは syslog はあまり信頼できません。 必要なメッセージを切り詰めてしまったり、破棄してしまったりする可能性があります。 postmasterstderr を何らかのログ回転プログラムにパイプで渡す方が、より便利であると考えるかもしれません。 pg_ctl を使ってサーバを起動する場合、そのpostmasterstderr はすでにstdoutにリダイレクトされています。 ですので、単にパイプコマンドを以下のように使用する必要があります。

pg_ctl start | logrotate

PostgreSQL 配布物には、適したログ回転プログラムは含まれていませんが、例えば、Apache の配布物に含まれているものなど、ネット上には多くのものがあります。

アダルトレンタルサーバー