1. /usr/local/pgsql/data/postgres.conf の設定
特に指定していなければ、postgreSQL のログは /var/log/messages とコンソールへ出力されます。
これをログファイルに出力させるには
/usr/local/pgsql/data/postgres.conf
を編集します。
編集によって、出力先や動作を指定することができます。
root ユーザから postgres ユーザになって編集します。
ログの指定方法は、バージョンによって違いがあるようなので、詳細は「Let's Postgres ログ関連の設定」を参考にしてください。
10.0 では、以下のように設定します。(あくまでわたしの設定例)
ログの出力先を syslog から stderr に変更します。
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
ログの出力先を /var/log/postgres というディレクトリにします。
#log_directory = 'log' # directory where log files are written,
↓
log_directory = '/var/log/postgres' # directory where log files are written,
ファイル名を postgresql.log とします。
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
↓
log_filename = 'postgresql.log' # log file name pattern,
ローテーションは、newsyslog で制御する予定なので、下記はコメントのままとします。
#log_rotation_age = 1d # Automatic rotation of logfiles will
ログの先頭に出力時刻とプロセスIDをつけます。
#log_line_prefix = '%m [%p] ' # special values:
↓
log_line_prefix = '%m [%p] ' # special values:
2. フォルダとファイルの作成
初回出力用にフォルダとファイルを作成します。root ユーザで
> mkdir /var/log/postgres
> touch /var/log/postgres/postgresql.log
> chown -Rv postgres:postgres /var/log/postgres
/var/log/postgres/postgresql.log
/var/log/postgres
3. 出力の確認
portgreSQL を再起動して、ログを確認します。
> /usr/local/etc/rc.d/postgresql restart
2017-10-16 18:12:13.826 JST [50162] LOG: listening on IPv6 address "::", port 5432
2017-10-16 18:12:13.826 JST [50162] LOG: listening on IPv4 address "0.0.0.0", port 5432
2017-10-16 18:12:13.829 JST [50162] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2017-10-16 18:12:13.839 JST [50162] LOG: redirecting log output to logging collector process
2017-10-16 18:12:13.839 JST [50162] HINT: Future log output will appear in directory "/var/log/postgres".
ログの中身を確認してみますと
2017-10-16 18:12:13.842 JST [50164] LOG: database system was shut down at 2017-10-16 18:12:13 JST
2017-10-16 18:12:13.845 JST [50162] LOG: database system is ready to accept connections
という具合に出力されています。
4. ログローテーションの設定
ログローテーションの設定を /usr/local/pgsql/data/postgres.conf で行うこともできるのですが、FreeBSD ですから newsyslog で行いましょう。
/usr/local/etc/newsyslog.conf.d/postgres.conf
を作成して
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/postgres/postgresql.log postgres:postgres 644 9 100 * -
ローテーションの間隔やサイズは、出力量に合わせて調整します。