1. 概要
バージョン「8.4」あたりから、「PostgreSQL」のログは、だいぶ使いやすくなっています。
2. /var/db/postgres/data14/postgresql.conf の設定
/var/db/postgres/data14/postgresql.conf
で出力先や動作を指定することができます。
コンフィグレーションファイルの編集の際は気を付けて、所有者が「postgres:postgres」から変わらないようにします。
「root」ユーザで編集して所有者が、「root:wheel」になったりすると、「PortgreSQL」起動時に読み込めなくて、えらいことになります。
sudo -u postgres vim /var/db/postgres/data14/postgresql.conf
で編集しましょう。
「postgreSQL」のコンフィグレーションファイルはすべてこのやり方で編集します。
ログの指定方法は、バージョンによって違いがあるようなので、詳細は「Let's Postgres ログ関連の設定」を参考にしてください。
/var/log/postgresql/postgresql.log
というファイルに出力させ、1日ずつローテーションさせることとしますと
log_destination = 'syslog'
#log_destination = 'stderr' # Valid values are combinations of
を
#log_destination = 'syslog'
log_destination = 'stderr' # Valid values are combinations of
に変えます。以下、矢印で・・・。
#logging_collector = off # Enable capturing of stderr and csvlog
↓
logging_collector = on # Enable capturing of stderr and csvlog
#log_directory = 'log' # directory where log files are written,
↓
log_directory = '/var/log/postgresql' # directory where log files are written,
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' # log file name pattern,
↓
log_filename = 'postgresql.log'
これは、ローテーションの具合をみて書き換えるかも・・・。
#log_rotation_age = 1d # Automatic rotation of logfiles will
↓
log_rotation_age = 1d # Automatic rotation of logfiles will
1日ごとにローテーションさせます。
ローテーションは、「newsyslog.conf」に書いてそちらで制御させようかとも思ったのですが、ファイルの所有権の問題がややこしそうなので、当面こちらで・・・。
#log_line_prefix = '%m [%p] ' # special values:
↓
log_line_prefix = '%t ' # special values:
とりあえず、先頭に出力時刻だけつけるようにします。
後ろにセパレータの空白か何かをいれないと後続のメッセージとくっついて出力されちゃいます。
3. フォルダとファイルの作成
初回出力用にフォルダとファイルを作成します。
「root」ユーザ権限で。
mkdir -pv /var/log/postgresql
touch /var/log/postgresql/postgresql.log
chown -R postgres:postgres /var/log/postgresql
4. 出力の確認
「PortgreSQL」を再起動して、ログを確認します。
「root」ユーザ権限で。
service postgresql restart
前回まで、起動時に下記のように表示されていたメッセージ。
2024-06-18 10:39:31.042 JST [23271] LOG: ending log output to stderr
2024-06-18 10:39:31.042 JST [23271] HINT: Future log output will go to log destination "syslog".
下記のように変わります。
2024-06-18 10:44:55 JST LOG: redirecting log output to logging collector process
2024-06-18 10:44:55 JST HINT: Future log output will appear in directory "/var/log/postgresql".
ログの中身を確認してみます。
tail /var/log/postgresql/postgresql.log
下記のようになっています。
2024-06-18 10:44:55 JST LOG: starting PostgreSQL 14.12 on amd64-portbld-freebsd14.1, compiled by clang version 15.0.7 (https://git.FreeBSD.org/ports.git bab630478e8ca4bce5b630841eb887c5fe224d9a), 64-bit
2024-06-18 10:44:55 JST LOG: listening on IPv6 address "::1", port 5432
2024-06-18 10:44:55 JST LOG: listening on IPv4 address "127.0.0.1", port 5432
2024-06-18 10:44:55 JST LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
2024-06-18 10:44:55 JST LOG: database system was shut down at 2024-06-18 10:44:55 JST
2024-06-18 10:44:55 JST LOG: database system is ready to accept connections
ログの出力は、意図通りになりました。