以下の環境変数または接続文字列を設定することで、アプリケーションのログが出力できます。
環境変数 | 設定する値 | 説明 |
|---|---|---|
PGXLOGDIR(注) | アプリケーションのログの出力先ディレクトリ | アプリケーションのログの出力先ディレクトリを指定します。 ログファイルは、コネクションごとに作成されます。ファイル名は、以下のようにプロセスID、コネクションID、およびログファイルが作成された日時が付加されます。
|
PGXLOGSIZE(注) | アプリケーションのログの最大サイズ | アプリケーションのログのサイズがこの値を超えると、別のファイルにログを切り替えます。 単位はメガバイトで、1から2047まで指定できます。 |
注)ログを出力する場合は、必ず設定してください。設定しなかった場合、または設定に誤りがある場合は、環境変数でのログ出力の設定は有効になりません。
接続文字列 | 設定する値 | 説明 |
|---|---|---|
logdir(注) | アプリケーションのログの出力先ディレクトリ | アプリケーションのログの出力先ディレクトリを指定します。 ログファイルは、コネクションごとに作成されます。ファイル名は、以下のようにプロセスID、コネクションID、およびログファイルが作成された日時が付加されます。
|
logsize(注) | アプリケーションのログの最大サイズ | アプリケーションのログのサイズがこの値を超えると、別のファイルにログを切り替えます。 単位はメガバイトで、1から2047まで指定できます。 |
注)ログを出力する場合は、必ず設定してください。設定しなかった場合、または設定に誤りがある場合は、接続文字列でのログ出力の設定は有効になりません。
ポイント
環境変数および接続文字列の両方が指定された場合は、接続文字列を優先します。
Linuxの場合
設定例(TCシェル)
setenv PGXLOGDIR /tmp/ setenv PGXLOGSIZE 2
設定例(Bash)
PGXLOGDIR=/tmp/ ; export PGXLOGDIR PGXLOGSIZE=2 ; export PGXLOGSIZE
Windowsの場合
set PGXLOGDIR=C:\temp\ set PGXLOGSIZE=2
Solarisの場合
設定例(Cシェル)
setenv PGXLOGDIR /tmp/ setenv PGXLOGSIZE 2
設定例(Bash、Bシェル、Kシェル)
PGXLOGDIR=/tmp/ ; export PGXLOGDIR PGXLOGSIZE=2 ; export PGXLOGSIZE
PQconnectdbParams関数を使用する場合
#include <libpq-fe.h>
...
#define PARAMS_ARRAY_SIZE 13
const char **keywords = malloc(PARAMS_ARRAY_SIZE * sizeof(*keywords));
const char **values =malloc(PARAMS_ARRAY_SIZE * sizeof(*values));
int expand_dbname = 0;
PGconn *conn;
keywords[0] = "hostaddr";
values[0] = "192.168.0.1,192.168.0.2";
keywords[1] = "port";
values[1] = "26500";
keywords[2] = "user";
values[2] = "myuser";
keywords[3] = "password";
values[3] = "myuser01";
keywords[4] = "dbname";
values[4] = "mydb";
keywords[5] = "connect_timeout";
values[5] = "20";
keywords[6] = keepalives;
values[6] = "1";
keywords[7] = keepalives_idle;
values[7] = "20";
keywords[8] = "keepalives_interval";
values[8] = "5";
keywords[9] = "keepalives_count";
values[9] = "2";
keywords[10]="logdir";
values[10]="/tmp/";
keywords[11]="logsize";
values[11]="2";
keywords[12] = NULL;
values[12] = NULL;
conn = PQconnectdbParams(keywords,values,expand_dbname);
...PQconnectdb関数を使用する場合
#include <libpq-fe.h>
...
char *conninfo = "hostaddr=192.168.0.1,192.168.0.2 port=26500 dbname=mydb user=myuser
password=myuser01 connect_timeout=20 keepalives=1 keepalives_idle=20 keepalives_interval=5 keepalives_count=2 logdir=/tmp/ logsize=2";
PGconn *conn;
conn = PQconnectdb(conninfo);
...注意
Windows環境でPQconnectdb関数を使用する場合、パスの区切り文字である“\”は、“\”によるエスケープ処理をしないとログが出力されません。
PQsetdbLogin関数とPQsetdb関数は接続文字列の指定方法をサポートしていません。
ログの出力形式と出力情報について、説明します。
日付△時刻△コネクションID△通信種別△実行ログ
△:半角スペースを表します
出力情報 | 説明 |
|---|---|
日付 | 処理を実行した日付が以下の形式で出力されます。
|
時刻 | 処理を実行した時刻が以下の形式で出力されます。
|
コネクションID | コネクションIDが以下の形式で出力されます。
|
通信種別 | 通信種別が以下の形式で出力されます。
|
実行ログ | 実行した処理の内容が出力されます。 |
:(省略)
2012/09/26 13:54:46.760 (1) To backend> Msg Q
2012/09/26 13:54:46.760 (1) To backend> "DECLARE myportal CURSOR FOR select * from tb1"
・・・(1)
2012/09/26 13:54:46.760 (1) From backend> C
2012/09/26 13:54:46.760 (1) From backend (#4)> 19
2012/09/26 13:54:46.760 (1) From backend> "DECLARE CURSOR"
2012/09/26 13:54:46.760 (1) From backend> Z
2012/09/26 13:54:46.760 (1) From backend (#4)> 5
2012/09/26 13:54:46.760 (1) From backend> Z
2012/09/26 13:54:46.760 (1) From backend (#4)> 5
2012/09/26 13:54:46.760 (1) From backend> T
2012/09/26 13:54:46.760 (1) To backend> Msg Q
2012/09/26 13:54:46.760 (1) To backend> "FETCH ALL in myportal"
2012/09/26 13:54:46.760 (1) To backend> Msg complete, length 27
2012/09/26 13:54:47.760 (1) From backend> T
2012/09/26 13:54:47.760 (1) From backend (#4)> 48
2012/09/26 13:54:47.760 (1) From backend (#2)> 2
2012/09/26 13:54:47.760 (1) From backend> "c1"
:(省略)
2012/09/26 13:54:47.760 (1) From backend> "FETCH 2" ・・・(2)
2012/09/26 13:54:47.760 (1) From backend> Z
2012/09/26 13:54:47.760 (1) From backend (#4)> 5
2012/09/26 13:54:47.760 (1) From backend> Z
2012/09/26 13:54:47.760 (1) From backend (#4)> 5
2012/09/26 13:54:47.760 (1) From backend> T
2012/09/26 13:54:47.760 (1) To backend> Msg Q
2012/09/26 13:54:47.760 (1) To backend> "CLOSE myportal"
2012/09/26 13:54:47.760 (1) To backend> Msg complete, length 20
2012/09/26 13:54:47.760 (1) From backend> C
2012/09/26 13:54:47.760 (1) From backend (#4)> 17
2012/09/26 13:54:47.760 (1) From backend> "CLOSE CURSOR"
2012/09/26 13:54:47.760 (1) From backend> Z
2012/09/26 13:54:47.760 (1) From backend (#4)> 5
:(省略)
2012/09/26 13:54:47.760 (1) To backend> "END"
2012/09/26 13:54:47.760 (1) To backend> Msg complete, length 9
:(省略)(1)クエリ情報
実行したSQL文を出力します。
(2)Fetch情報
データベースサーバから、データを取得したことを表します。
参考
アプリケーションのログの出力設定は、PQtrace関数でも指定できます。環境変数および接続文字列の設定よりPQtrace関数の指定が優先されます。
PQtrace関数での指定方法(注)
void PQtrace(PGconn *conn, FILE *stream);
注)Windowsにおいて、libpqライブラリとアプリケーションが異なるオプションでコンパイルされるとこの関数呼び出しのFILEポインタの内部表現の違いにより、アプリケーションが正しく動きません。
libpqのコンパイル時は、/MDオプションを指定してください。