1. いきさつ
バージョン 8.4 くらいからだったでしょうか。
PortgreSQL の起動直後に
LOG: ending log output to stderr
HINT: Future log output will go to log destination "syslog".
というメッセージが出力されるようになりまして。ERROR や WARNING ではないのですがちょっと気になっていました。
英語文盲なのもので「よくわからんなぁ」と思っていましたが、まさにログに関するメッセージだったのですね。
2. /usr/local/pgsql/data/postgres.conf の設定
「PortgreSQL」のログは、だいぶ使いやすくなっているようで、
/usr/local/pgsql/data/postgres.conf
で出力先や動作を指定することができます。
コンフィグレーションファイルの編集の際は気を付けて、所有者が pgsql:pgsql であることを確認します。 root ユーザで編集して所有者が root:wheel になったりすると PortgreSQL 起動時に読み込めなくて、えらいことになったりします。
ログの指定方法は、バージョンによって違いがあるようなので、詳細は「Let's Postgres ログ関連の設定」を参考にしてください。
わたしは 9.4 で確認しています。
さて、/var/log/pgsql/pgsql.log というファイルに出力させ、1日ずつローテーションさせることとしますと
log_destination = 'syslog'
#log_destination = 'stderr'
を
#log_destination = 'syslog'
log_destination = 'stderr'
に変えます。以下、矢印で・・・。
#logging_collector = off # Enable capturing of stderr and csvlog
↓
logging_collector = on # Enable capturing of stderr and csvlog
#log_directory = 'pg_log' # directory where log files are written,
↓
log_directory = '/var/log/pgsql' # directory where log files are written,
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
↓
log_filename = 'pgsql.log' # log file name pattern,
これは、ローテーションの具合をみて書き換えるかも・・・。
#log_rotation_age = 1d # Automatic rotation of logfiles will
↓
log_rotation_age = 1d # Automatic rotation of logfiles will
1日ごとにローテーションさせます。
ローテーションは newsyslog.conf に書いてそちらで制御させようかとも思ったのですが、ファイルの所有権の問題がややこしそうなので、当面こちらで・・・。
#log_line_prefix = '' # special values:
↓
log_line_prefix = '%t ' # special values:
とりあえず、先頭に出力時刻だけつけるようにします。
後ろにセパレータの空白か何かをいれないと後続のメッセージとくっついて出力されちゃいます。
3. フォルダとファイルの作成
初回出力用にフォルダとファイルを作成します。
mkdir /var/log/pgsql
touch /var/log/pgsql/pgsql.log
chown -R pgsql:pgsql /var/log/pgsql
4. 出力の確認
PortgreSQL を再起動して、ログを確認します。
/usr/local/etc/rc.d/postgresql restart
2016-11-12 15:22:48 JST LOG: redirecting log output to logging collector process
2016-11-12 15:22:48 JST HINT: Future log output will appear in directory "/var/log/pgsql".
をを、メッセージも変わったじゃないの。
ログの中身を確認してみますと
2016-11-12 15:22:48 JST LOG: MultiXact member wraparound protections are now enabled
2016-11-12 15:22:48 JST LOG: database system is ready to accept connections
2016-11-12 15:22:48 JST LOG: autovacuum launcher started
意図通りになったので、なんかちょっとうれしい。