PostgreSQLのバージョン:

log_line_prefix

これは、各ログ行の先頭に出力するprintfの書式文字列です。%から始まるエスケープシーケンスは、後述の通りのステータス情報で置き換えられます。この他のエスケープは無視されます。他の文字はそのままログ行に出力されます。エスケープの中には、セッションプロセスによってのみ認識可能なものがあり、これらはメインサーバプロセスなどのバックグラウンドプロセスでは空文字として扱われます。状態情報はオプション名の%の後か前に数字を指定することにより、左寄せまた右寄せにすることができます。数字が負ならば状態情報を右側に空白を詰めて最小限の幅にし、正の値は左に空白を詰めます。ログファイルではパディングは人間の視認性を向上させるので有用です。このパラメータは、postgresql.confファイル、または、サーバのコマンドラインでのみで設定することができます。デフォルトは、タイムスタンプとプロセスIDをログ出力する'%m [%p] 'です。 エスケープ 効果 セッションのみ %a アプリケーション名 %u ユーザ名 %d データベース名 %r 遠隔ホスト名、またはIPアドレス、およびポート番号 %h 遠隔ホスト名、またはIPアドレス %p プロセス識別子 × %t ミリ秒無しのタイムスタンプ × %m ミリ秒付きタイムスタンプ × %n ミリ秒付きタイムスタンプ(Unixエポックとして) × %i コマンドタグ。セッションの現在のコマンド種類 %e SQLSTATE エラーコード × %c セッションID。下記参照 × %l 各セッションまたは各プロセスのログ行の番号。1から始まります。 × %s プロセスの開始タイムスタンプ × %v 仮想トランザクションID(backendID/localXID) × %x トランザクションID (未割り当ての場合は0) × %q 何も出力しません。 非セッションプロセスではこのエスケープ以降の出力を停止します。 セッションプロセスでは無視されます。 × %% %文字そのもの × %cエスケープは、2つの4バイトの16進数(先頭のゼロは省略)をドットで区切った構成の、準一意なセッション識別子を表示します。この数値はプロセスの起動時間とそのプロセスIDです。したがって、%cを使用して、これらの項目を出力するための文字数を省略することができます。例として、pg_stat_activityからセッション識別子を生成するには以下の問い合わせを行ないます。SELECT to_hex(trunc(EXTRACT(EPOCH FROM backend_start))::integer) || '.' || to_hex(pid)FROM pg_stat_activity;

log_line_prefixに空白文字以外の値を設定する場合、通常、ログ行の残りとの区切りを明確にするために、その最後の文字を空白文字にすべきです。句読点用の文字も使用できます。

Syslogは独自にタイムスタンプとプロセスID情報を生成します。ですのでおそらく、Syslogにログを保管する場合は、こうしたエスケープを含めるとは考えないでしょう。

%qエスケープは、ユーザやデータベース名のように、セッション(バックエンド)コンテキストでのみ存在する情報を含める場合に有用です。%qlog_line_prefix = '%m [%p] %q%u@%d/%a '

推奨事項 [EN]

Primarily useful for providing extra information when logging to syslog or eventlog. Try "%h:%d:%u:%c %t" for this.

件のコメント