PostgreSQLのエラーログ出力

今までsyslogに吐いていましたが、ローテーションがsyslog任せになってしまうので標準出力させてみました。postgresql.confを修正。環境はPostgreSQL8.1.11。

●とりあえず標準ログ出力。
log_destination = 'stderr'

●標準出力用の設定。標準出力のリダイレクトをONにする。
redirect_stderr = on

●リダイレクトしたログのファイル出力先ディレクトリを設定する。
 このディレクトリはDBユーザーの権限で作成すること。
log_directory = '/var/log/postgresql'

●1週間でローテーションする時はログファイル名を***.曜日で作成する。
log_filename = 'postgresql.log.%a'

●同名のファイルが存在する時は上書きする。ローテーション用。
log_truncate_on_rotation = on

●1日でログファイルを切り替える。
log_rotation_age = 1440

●ログフォーマット。カンマ区切りで表示。
log_line_prefix = '%t,%h,%u,%d,%l,'

ログのサンプル

2008-03-13 05:00:38 JST,,,,1,LOG:  database system was shut down at 2008-03-13 05:00:36 JST
2008-03-13 05:00:38 JST,,,,2,LOG:  checkpoint record is at 0/33A844
2008-03-13 05:00:38 JST,,,,3,LOG:  redo record is at 0/33A844; undo record is at 0/0; shutdown TRUE
2008-03-13 05:00:38 JST,,,,4,LOG:  next transaction ID: 585; next OID: 10794
2008-03-13 05:00:38 JST,,,,5,LOG:  next MultiXactId: 1; next MultiXactOffset: 0
2008-03-13 05:00:38 JST,,,,6,LOG:  database system is ready
2008-03-13 05:00:38 JST,,,,7,LOG:  transaction ID wrap limit is 2147484146, limited by database "postgres"
2008-03-13 05:00:38 JST,,,,1,LOG:  autovacuum: processing database "postgres"
2008-03-13 05:00:48 JST,,[unknown],[unknown],1,LOG:  connection received: host=[local]
2008-03-13 05:00:48 JST,[local],postgres,postgres,2,LOG:  connection authorized: user=postgres database=postgres
2008-03-13 05:02:54 JST,,[unknown],[unknown],1,LOG:  connection received: host=[local]
2008-03-13 05:02:54 JST,[local],postgres,postgres,2,LOG:  connection authorized: user=postgres database=postgres

フォーマットの指定をしないとログが使いにくいですね。簡単にCSV形式に設定できるのは楽と言えば楽かも知れません。それから、ローテーションが同名ファイルだったら上書き・・だけなのが辛いですね。もっと良い設定があるのかも知れないので調査中。