他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

17.7. エラー報告とログ取得

17.7.1. ログの出力先

log_destination (文字列)

PostgreSQLは、stderr および syslogを含めて、サーバメッセージのログ取得に対し数種類の方法を提供します。Windowsでは、eventlogも同時に提供します。このオプションを設定するには、コンマ区切りでお好みのログ出力先を記載します。デフォルトでは、ログはstderrのみに出力されます。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

redirect_stderrboolean

このオプションにより、stderrに送られるメッセージを取り出し、ログファイルにリダイレクトすることができます。このオプションとstderrへのログとの組み合わせはsyslogへのログよりもしばしば有用です。メッセージの一部の種類がsyslogでは出力されない可能性があるためです(一般的な例として、ダイナミックリンカのエラーメッセージがあります)。このオプションはサーバ起動時のみ設定可能です。

log_directorystring

redirect_stderrが有効な場合、このオプションはログファイルが作成されるディレクトリを決定します。ディレクトリは絶対パス、もしくはクラスタデータディレクトリの相対パスとして指定されます。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

log_filenamestring

redirect_stderrが有効な場合、このオプションは作成されたログファイルのファイル名を設定します。値はstrftimeパターンとして扱われるため、%エスケープを使用して、時刻によって変動するファイル名を指定することができます。%エスケープが存在しない場合、PostgreSQLは新規ログファイルが開かれた時刻を追加します。例えば、log_filenameserver_logであれば、ログ開始時刻、 Sun Aug 29 19:02:33 2004 MST に対し、選択されたファイル名はserver_log.1093827753となります。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

log_rotation_ageinteger

redirect_stderrが有効な場合、このオプションは個々のログファイルの最大寿命をを決定します。ここで指定した時間(分単位)経過すると、新しいログファイルが生成されます。ゼロに設定することで、時間に基づいた新しいログファイルの生成は無効になります。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

log_rotation_sizeinteger

redirect_stderrが有効な場合、このオプションは個々のログファイルの最大要領を決定します。ここで指定したキロバイト分ログファイルに出力された後、新しいログファイルが生成されます。ゼロに設定することで、サイズに基づいた新しいログファイルの生成は無効になります。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

log_truncate_on_rotationboolean

redirect_stderrが有効な場合、このオプションにより、PostgreSQLは既存の同名のファイルに追加するのではなく、そのファイルを切り詰める(上書きする)ようになります。しかし、切り詰めは時間を基にしたローテーションのために新規にファイルが開かれた時にのみ発生し、サーバ起動時やサイズを基にしたローテーションでは発生しません。偽の場合、全ての場合において既存のファイルは追記されます。例えば、このオプションをpostgresql-%H.logのようなlog_filenameと組み合わせて使用すると、24個の時別のログファイルが生成され、それらは周期的に上書きされることになります。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

例:7日間のログを保存し、毎日のログを server_log.Monserver_log.Tue、等とし、そして自動的に前週のログを今週のログで上書きするには以下のように設定します。 log_filenameserver_log.%aとし、 log_truncate_on_rotationonにし、そして log_rotation_age1440に設定します。

例:24時間のログを保持、1時間おきに1つのログファイルを作成、ただし、ログファイルのサイズが1ギガバイトを超えそうな場合即座に切り替えさせるには、 log_filenameserver_log.%H%Mにし、 log_truncate_on_rotationonにし、 log_rotation_age60にし、そして log_rotation_size1000000に設定します。 log_filename%Mを含めると、元の時間毎のファイル名と異なる名前を選択する可能性がある、サイズを元にしたローテーションを行うことができます。

syslog_facilitystring

syslogへのログ取得が有効な場合、このオプションはsyslog"facility"が使われるように確定します。LOCAL0LOCAL1LOCAL2LOCAL3LOCAL4LOCAL5LOCAL6LOCAL7の中から選んでください。デフォルトはLOCAL0です。使用しているシステムのsyslogデーモンの文書を同時に参照してください。このオプションはサーバ起動時、もしくはpostgresql.conf構成ファイルで設定されます。

syslog_identstring

syslogにログ取得が有効な場合、このオプションはsyslogログ内のPostgreSQLメッセージを特定するのに使用するプログラム名を確定します。デフォルトはpostgresです。このオプションはサーバ起動時、もしくはpostgresql.conf構成ファイルで設定されます。

17.7.2. いつログを取得するか

client_min_messagesstring

どのメッセージ階層をクライアントに送るかを管理します。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1LOGNOTICEWARNINGERRORFATAL、およびPANICです。それぞれの階層はそれに続く全ての階層を包含します。階層が後の方になるにつれ、より少ないメッセージが送られます。デフォルトはNOTICEです。ここでのLOGの優先順位がlog_min_messagesの場合と異なることに注意してください。

log_min_messagesstring

どのメッセージ階層をサーバログに書き込むかを管理します。有効な値は DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORLOGFATAL、および PANICです。それぞれの階層はその下の全ての階層を含みます。階層を低くする程、より少ないメッセージがログに送られます。デフォルトはNOTICEです。ここでのLOGの優先順位がclient_min_messagesの場合と異なることに注意してください。スーパユーザのみこの設定を変更できます。

log_error_verbositystring

ログされたそれぞれのメッセージに対しサーバログ内に書き込まれる詳細度合を制御します。有効な値は、TERSEDEFAULT、およびVERBOSEで、それぞれ表示するメッセージのフィールドが追加されていきます。スーパーユーザのみがこの設定を変更することができます。

log_min_error_statementstring

エラー条件の原因となったSQL文をサーバログに記録するかを制御します。設定したレベル以上のエラーを発生させた全てのSQL文がログに記録されます。デフォルトは PANICです(実質、通常の使用ではこのオプションは無効になっています)。有効な値は、DEBUG5DEBUG4DEBUG3DEBUG2DEBUG1INFONOTICEWARNINGERRORFATALPANICです。例えば、これをERRORに設定すると、エラー、致命的なエラー、またはパニックを引き起こした全てのSQL文がログに記録されます。このオプションを有効にすると、サーバログに書き出されたエラー発生元を追跡することが容易になります。スーパーユーザのみがこのオプションを変更することができます。

log_min_duration_statementinteger

持続期間が指定されたミリ秒数に等しいか大きい場合、単一ログ行上の命令文と持続期間をログに残します。これを零に設定すると、全ての命令文とその持続期間を出力します。マイナス1(デフォルト)はこの機能を無効にします。例えば、250と設定した場合、250msもしくはそれ以上長く掛かった全てのSQL命令文がログとして残ります。このオプションを有効にすることにより、稼働させているアプリケーションでの最適化されていない問い合わせを追跡するのが便利になります。スーパユーザのみこの設定を変更できます。

silent_modeboolean論理値

サーバをメッセージ出力なしで実行します。このオプションを設定すると、サーバは自動的にバックグラウンドで起動し、制御端末を切り離します(postmaster-Sオプションと同じです)。サーバの標準出力や標準エラーは/dev/nullにリダイレクトされ、つまり、出力されたメッセージは全て喪失します。syslogロギングを有効にしていない、あるいはredirect_stderrを有効にしていない限り、エラーメッセージを確認することができなくなりますので、このオプションの使用は勧められません。

以下に、これらの設定で使用される各種メッセージの重要度レベルの一覧を示します。

DEBUG[1-5]

開発者によって使用される情報を提供します。

INFO

ユーザによって暗黙的に要求された情報を提供します。例えばVACUUM VERBOSE処理中。

NOTICE

長い識別子の切り詰め、および主キーの一部としてのインデックスの作成など、ユーザの補助になる情報を提供します。

WARNING

トランザクションブロック外でのCOMMITの様な、ユーザへの警告を提供します。

ERROR

現在のコマンドを中断させる原因となったエラーを報告します。

LOG

チェックポイントの活動の様な、管理者に関心のある情報を報告します。

FATAL

現在のセッションを中断させる原因となったエラーを報告します。

PANIC

全てのセッションを中断させる原因となったエラーを報告します。

17.7.3. 何をログに

debug_print_parseboolean
debug_print_rewrittenboolean
debug_print_planboolean
debug_pretty_printboolean

これらのオプションは、生成される各種のデバッグ出力を有効にします。実行された問い合わせそれぞれに対して、最終的なパースツリー、問い合わせリライタの出力、実行計画を出力します。debug_pretty_printはより読みやすくその表示をインデントしますが、出力書式がより長くなります。client_min_messagesもしくはlog_min_messagesはそれぞれ、実際に出力をクライアントもしくはサーバログに送信するために、DEBUG1以下にしなければなりません。デフォルトでは、これらのオプションは無効です。

log_connectionsboolean

これはそれぞれの成功した接続を詳述する文字行をサーバログに出力します。デフォルトはオフですが、多分とても便利です。psqlの様なクライアントプログラムは、パスワードを要求されると決定まで2回接続を試みるので、duplicate "connection received"メッセージは問題を必要として指摘するものではありません。このオプションはサーバの起動時、もしくはpostgresql.confファイルで設定されます。

log_disconnectionsboolean

これはlog_connections同様の出力をサーバログに行い、さらに加えて、セッション終了時にセッションの期間も出力します。デフォルトではこれは無効です。このオプションはサーバ起動時、もしくはpostgresql.confファイルで設定可能です。

log_durationboolean

log_statementのログ取得条件を満たす文の場合、完了した文それぞれについて、その経過時間をログするようにします。このオプションを使用する時には、文とプロセスIDもしくはセッションIDを使用した経過時間とを結び付けられるように、もしsyslogを使用していないのであれば、log_line_prefixを使用してPIDもしくはセッションIDをログに残すことを推奨します。デフォルトは無効です。スーパーユーザのみがこの設定を変更することができます。

log_line_prefixstring

これは、各ログ行の先頭に出力するprintfの書式文字列です。デフォルトは空文字列です。認識可能なエスケープは後述の通りに置換されます。この他のエスケープは無視されます。他の文字はそのままログ行に出力されます。エスケープの中には、セッションプロセスによってのみ認識可能なものがあり、これらはpostmasterなどのバックグラウンドプロセスには適用されません。Syslogは独自に時刻とプロセスID情報を出力しますので、Syslogを使用している場合はおそらく、対応するエスケープを使用しようとは思わないでしょう。このオプションはサーバ起動時、もしくはpostgresql.confファイルで設定することができます。

エスケープ効果セッションのみ
%uユーザ名
%dデータベース名
%r遠隔ホスト名、もしくはIPアドレスとポート番号
%h遠隔ホスト名、もしくはIPアドレス
%pプロセス識別子×
%tタイムスタンプ(ミリ秒無し)×
%mミリ秒付きタイムスタンプ×
%iコマンドタグ。このログ行を生成したコマンドです。
%c セッションID。各セッションに対する一意な識別子です。これは2つの4バイト16進数の番号をドットで区切ったものです(先頭に0は付きません)。この番号はセッションの開始時刻とプロセスIDです。ですので、これらの項目の出力を省略して出力行を短くするためにも使用することができます。 はい
%l各プロセスのログ行の番号。1から始まります。×
%sセッション開始タイムスタンプ
%xトランザクション識別子
%q 何も出力しません。非セッションプロセスではこのエスケープ以降の出力を停止します。セッションプロセスでは無視されます。 ×
%%%文字そのもの×

log_statement (文字列)

どのSQL文をログに記録するかを制御します。有効な値は、noneddlmod、およびallです。ddlは、CREATEALTER、およびDROPといった、データ定義コマンドを全てログに記録します。modは、全てのddl文に加え、INSERTUPDATEDELETETRUNCATE、およびCOPY FROMをログに記録します。PREPAREEXPLAIN ANALYZEコマンドも、そこに含まれるコマンドが適切な種類であればログが録られます。

デフォルトはnoneです。スーパユーザのみこの設定を変更できます。

注意: EXECUTE文はddl文ともmod文ともみなされていません。構文エラーを生成する文はログにとられません。これらの文のエラーのログを残すにはlog_min_error_statementを設定してください。

PL/pgSQLサーバサイド言語で定義された関数の場合、その関数で実行される問い合わせは、特定セッション内で最初に呼び出された関数における問い合わせのみが記録されます。PL/pgSQLは、関数内のSQL文に対して生成された問い合わせ計画のキャッシュを保持しているためです。

log_hostnameboolean

デフォルトでは、接続ログメッセージには接続ホストのIPアドレスのみが表示されます。このオプションを有効にすることで、ホスト名もログに表示されるようになります。ホスト名解決の設定次第で、無視できないほどの性能の悪化が課せられることに注意してください。このオプションはサーバ起動時、またはpostgresql.confファイルのみで設定することができます。