2. プロセスとメモリー
3.10 ログファイル
3.10.2 ログファイル名
ログファイル名を決定する要素について説明しています。
□ パラメーター指定
ログファイルの出力先とファイル名は以下のパラメーターで決定されます。
表 46 ログファイルの決定
パラメーター 説明 デフォルト値
log_directory ログ出力ディレクトリ pg_log
log_filename ログファイル名 postgresql-%Y-%m-%d_%H%M%S.log
log_file_mode ログファイルのアクセス権 0600
パラメーターlog_directory は絶対パスまたはデータベース・クラスタからの相対パスを 記述できます。指定したディレクトリが存在しない場合にはインスタンス起動時に自動的 に作成されます。ディレクトリが作成できない場合はインスタンス起動がエラーになりま す。下記はパラメーターlog_directoryに「/var」を指定した場合のインスタンス起動エラー です。
例 86 ディレクトリ作成エラー
パラメーターlog_filename に%A を含めるとクラスタのロケールに依存せず英語の曜日 名が出力されます。
□ CSVファイル
パラメーターlog_destinationにcsvlogを指定すると、ログファイルの出力形式をカンマ
(,)区切りのCSVにすることができます。
$ pg_ctl –D data start server starting
FATAL: could not open log file "/var/postgresql-2015-01-08_113129.log":
Permission denied
例 87 CSVファイル
パラメーターlog_filename に指定された拡張子が.log の場合、拡張子が.csv に変更され たログファイルが作成されます。また.log の拡張子を持つファイルも同時に作成されます が、内容は一部だけです。
□ SYSLOG出力
パラメーターlog_destinationにsyslogを指定するとローカルホストのsyslogにデータが 転送されます。ただし数行のレコードが記録されたログファイルも作成されます。
例 88 SYSLOGに転送された情報
表 47 SYSLOG出力に関係するパラメータ
パラメーター 説明 デフォルト値
log_destination syslogに設定することでSYSLOG転送を有効化 stderr
syslog_facility SYSLOGのファシリティ LOCAL0
syslog_ident ログに出力されるアプリケーション名 postgres
SYSLOGに出力されたログにはパラメーターsyslog_identで指定された名前の後にログ
を出力したプロセスのプロセスIDが出力されます。
3.10.3 ローテーション
pg_rotate_logfile 関数を実行するか、loggerプロセスに SIGUSR1 シグナルを送信する
とログのローテーションが行われます。ただし、パラメーター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
□ pg_rotate_logfile関数の仕様
本関数は superuser 権限を持つユーザーのみ実行できます。一般ユーザーが実行すると 以下のメッセージが出力されます。
本関数はlogging_collectorパラメーターがonに設定されている(=loggerプロセスが起 動している)場合にのみtrueを返します。logging_collector パラメーターがoff の場合、
関数の実行は成功しますが、以下のメッセージが出力されてfalseを返します。
□ 出力中のログファイル削除
現在使用されているログファイルを削除してしまった場合、新しいログファイルは自動 的に再作成されません。強制的にローテーションを行うことで新規のログファイルを作成 させることができます。
3.10.4 ログの内容
標準設定のログには先頭にログのカテゴリーを示す文字列が出力され、その後にログ内 容が記録されます。カテゴリーに示される文字列は以下の通りです。
表 48 エラーログのカテゴリーと監視対象 文字列 内容
DEBUG: 開発者用メッセージ
INFO: ユーザーによって明示された詳細情報(VACUUM VERBOSE等)
NOTICE: 長い識別子の切り捨て等、ユーザーに対する補助情報
WARNING: トランザクション外のCOMMIT実行等、ユーザーへの警告
ERROR: コマンドの実行エラー等
LOG: チェックポイントの活動等、管理者用メッセージ
FATAL: セッションの終了を伴うエラー等
PANIC: インスタンスの停止や全セッションの終了を伴うエラー等
??? 不明のメッセージ。基本的には出力されない。
標準設定のログには、ログ出力時刻、ユーザー名、データベース名等の情報がまったく出 力されません。このため監査に使用するには不十分です。ログにこれらの情報を指定するた
ERROR: must be superuser to rotate log files
WARNING: rotation not possible because log collection not active
めにはパラメーターlog_line_prefixを指定します。以下の文字を指定できます。
表 49 パラメータ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に変換されてログファイルの内部で混在することになります。
図 9 ログファイルの文字コード
インスタンス(log_statement=all)
エンコード UTF8
エンコード EUCJP WHERE c1='漢字'
WHERE c1='漢字'
UTF8 のログ ログファイル client_encoding='SJIS'
日本語 EUC のログ