Docker公式のpostgresコンテナでクエリーログなどを出力する方法を紹介する。
docker runコマンドの場合
docker run
コマンドでpostgresコンテナを実行するとき、下記のようにロギングのオプションを指定することで、標準エラー出力にクエリーログなどが出力される。
docker run -it postgres:11.3 postgres \
-c log_destination=stderr \
-c log_statement=all \
-c log_connections=on \
-c log_disconnections=on
docker-composeの場合
docker-compose
の場合は、docker-compose.yml
のcommand
フィールドのpostgres
コマンドに下記のようなオプションを指定すると、標準エラー出力にクエリーログなどが出力される。
docker-compose.yml
version: '3.7'
services:
db:
image: postgres:11.3
# Make postgres logs. More information about logging, see official documentation: https://www.postgresql.org/docs/11/runtime-config-logging.html
command: postgres -c log_destination=stderr -c log_statement=all -c log_connections=on -c log_disconnections=on
logging:
options:
max-size: "10k"
max-file: "5"
ログの表示方法は:
docker-compose logs -f db
ちなみに、logging
についてはdockerのログをローテートする - Qiitaを参照。
各コマンドオプションの補足
コマンドオプションの詳しい説明はPostgreSQLの公式ドキュメントを参照してほしい。
log_destination=stderr
- ログの出力先
-
stderr
,syslog
,csvlog
から選べるが、今回はDockerの標準エラー出力に出すためにstderr
を選択した。
log_statement=all
- どのSQLをログに出すかの設定。
-
none
,all
,mod
,ddl
から選択する。 - デフォルトでは
none
で何もクエリーログを出さない設定になっている。 -
all
にすると次のようなログが表示されるようになる:
postgresql | 2019-06-17 07:05:01.681 UTC [32] LOG: statement: START TRANSACTION
postgresql | 2019-06-17 07:05:01.684 UTC [32] LOG: statement: SELECT 1 /* original connection */
postgresql | 2019-06-17 07:05:01.686 UTC [32] LOG: statement: COMMIT
log_connections=on
- コネクション接続時にログを出すかの設定。
- デフォルトでは
off
に設定されていて、何もログに出ない。 -
on
にすると次のようなログが出力される:
postgresql | 2019-06-17 07:05:01.662 UTC [32] LOG: connection received: host=172.19.0.3 port=37440
postgresql | 2019-06-17 07:05:01.664 UTC [32] LOG: connection authorized: user=root database=test
log_disconnections=on
- コネクション切断時にログを出すかの設定。
- デフォルトでは
off
に設定されていて、何もログに出ない。 -
on
にすると次のようなログが出力される:
postgresql | 2019-06-17 07:05:11.683 UTC [31] LOG: disconnection: session time: 0:00:10.046 user=root database=test host=172.19.0.3 port=37438
postgresql | 2019-06-17 07:05:11.687 UTC [32] LOG: disconnection: session time: 0:00:10.025 user=root database=test host=172.19.0.3 port=37440