2. プロセスとメモリー
3.10 ログファイル
3.10.2 ログファイル名
ログファイル名を決定する要素について説明しています。
□ パラメータ指定
ログファイルの出力先とファイル名は以下のパラメータで決定されます。
表 39 ログファイルの決定
パラメータ 説明 デフォルト値
log_directory ログ出力ディレクトリ pg_log
log_filename ログファイル名 postgresql-%Y-%m-%d_%H%M%S.log
log_file_mode ログファイルのアクセス権 0600
パラメータlog_directoryは絶対パスまたはデータベース・クラスタからの相対パスを記 述できます。指定したディレクトリが存在しない場合にはインスタンス起動時に自動的に 作成されます。ディレクトリが作成できない場合はインスタンス起動がエラーになります。
下記はパラメータlog_directoryに「/var」を指定した場合のインスタンス起動エラーです。
例 79 ディレクトリ作成エラー
パラメータlog_filename に%Aを含めるとクラスタのロケールに依存せず英語の曜日名 が出力されます。
□ CSVファイル
パラメータlog_destinationにcsvlogを指定すると、ログファイルの出力形式をカンマ(,)
区切りのCSVにすることができます。
$ pg_ctl –D data start server starting
FATAL: could not open log file "/var/postgresql-2014-06-10_134931.log":
Permission denied
例 80 CSVファイル
パラメータlog_filename に指定された拡張子が.logの場合、拡張子が.csvに変更された ログファイルが作成されます。また.logの拡張子を持つファイルも同時に作成されますが、
内容は一部だけです。
□ SYSLOG出力
パラメータlog_destinationにsyslogを指定するとローカルホストのsyslogにデータが転 送されます。ただし数行のレコードが記録されたログファイルも作成されます。
例 81 SYSLOGに転送された情報
表 40 SYSLOG出力に関係するパラメータ
パラメータ 説明 デフォルト値
log_destination syslogに設定することでSYSLOG転送を有効化 stderr
syslog_facility SYSLOGのファシリティ LOCAL0
syslog_ident ログに出力されるアプリケーション名 postgres
SYSLOGに出力されたログにはパラメータsyslog_identで指定された名前の後にログを
出力したプロセスのプロセスIDが出力されます。
3.10.3 ローテーション
loggerプロセスにUSR1シグナルを送信するとログのローテーションが行われます。た
だし、パラメータlog_filenameに時刻情報が含まれない場合等、新規のファイルが作成で きない場合ローテーションは行われません。
2014-06-10 14:17:04.415 JST,,,8226,,539694d0.2022,1,,2014-06-10 14:17:04 JST,,0,LOG,00000,"autovacuum launcher started",,,,,,,,,""
2014-06-10 14:17:04.415 JST,,,8220,,539694d0.201c,2,,2014-06-10 14:17:04 JST,,0,LOG,00000,"database system is ready to accept connections",,,,,,,,,""
Jun 11 13:40:24 rel64-1 postgres[7054]: [3-1] LOG: database system was shut down at 2014-06-11 13:40:09 JST
Jun 11 13:40:24 rel64-1 postgres[7051]: [3-1] LOG: database system is ready to accept connections
Jun 11 13:40:24 rel64-1 postgres[7058]: [3-1] LOG: autovacuum launcher started
3.10.4 ログの内容
標準設定のログには先頭にログのカテゴリーを示す文字列が出力され、その後にログ内 容が記録されます。カテゴリーに示される文字列は以下の通りです。
表 41 エラー・ログのカテゴリーと監視対象
文字列 内容
DEBUG: 開発者用メッセージ
INFO: ユーザーによって明示された詳細情報(VACUUM VERBOSE等)
NOTICE: 長い識別子の切り捨て等、ユーザーに対する補助情報
WARNING: トランザクション外のCOMMIT実行等、ユーザーへの警告
ERROR: コマンドの実行エラー等
LOG: チェックポイントの活動等、管理者用メッセージ
FATAL: セッションの終了を伴うエラー等
PANIC: インスタンスの停止や全セッションの終了を伴うエラー等
??? 不明のメッセージ。基本的には出力されない。
標準設定のログには、ログ出力時刻、ユーザー名、データベース名等の情報がまったく 出力されません。このため監査に使用するには不十分です。ログにこれらの情報を指定す るためにはパラメータlog_line_prefixを指定します。以下の文字を指定できます。
表 42 パラメータlog_line_prefixに指定できる文字 文字列 内容
%a アプリケーション名(set application_nameで設定)
%u 接続ユーザー名
%d 接続データベース名
%r リモート・ホスト名とポート番号(ローカル接続時は[local])
%h リモート・ホスト名
%p プロセスID
%t ミリ秒を除いたタイムスタンプ
%m ミリ秒込みのタイムスタンプ
%i コマンド名(INSERT, SELECT等)
%e SQLSTATEエラーコード
%c セッションID
%l セッション・ライン番号
%s セッション開始時刻
%v 仮想トランザクションID
%x トランザクションID
%q 非セッションプロセスではこのエスケープ以降の出力を停止
%% %文字
3.10.5 ログのエンコード
ログファイルに出力される文字の文字コードは、クライアント側のエンコードに依存せ ず、接続先データベースのエンコードで決定されます。このため、異なるエンコードを持 つ複数のデータベースを作成した環境では、SQL 文に指定されたリテラルの文字コードが まちまちになります。次の図ではエンコードUTF8のデータベースと、日本語EUCのデー タベースに対して SQL文を発行しています。パラメータCLIENT_ENCODING は SJIS なので、SQL文はShift_JISで送信されます。パラメータlog_statementをallに指定して いるため、実行されたSQL文がログに記録されます。記録されるSQL文はそれぞれUTF8 または日本語EUCに変換されてログファイルの内部で混在することになります。
図 7 ログファイルの文字コード
インスタンス(log_statement=all)
エンコード UTF8
エンコード EUCJP WHERE c1='漢字'
WHERE c1='漢字'
UTF8のログ
ログファイル client_encoding='SJIS'
日本語 EUC の ログ