2.3.39 CustomLog
任意のフォーマットのログをファイルに出力させる場合に指定します。
説明
任意のフォーマットのログをファイルに出力させる場合に指定します。フォーマットはLogFormatディレクティブで指定するフォーマットと同様です。
このディレクティブを複数指定する場合、同じファイル名は複数指定できません。
書式
CustomLog {ファイル名|パイプ} {"フォーマット"|ラベル名} [env=[!]環境変数]
指定できる値
- ファイル名
-
ログの出力先ファイル名を指定します。ファイル名には、絶対パスまたはServerRootディレクティブの指定値からの相対パスが指定できます。
- パイプ
-
標準入力からログ情報を受け取るプログラムを"|プログラム名"の形式で指定します。Webサーバはログ情報に含める改行コードをCRLFにして渡します。
パイプで指定されたプログラムは、制御プロセスとWebサーバプロセス用にログ情報を受け取るそれぞれ別のプロセスとして生成されます。これをパイププロセスと呼びます。サービスとしてWebサーバを起動する場合には次の点に注意してください。
-
制御プロセスのログ情報取得不可
サービスとしてWebサーバを起動した場合には、制御プロセスからのログ情報を受け取るための標準入力はNULデバイスに関連づけられているため、制御プロセス用のパイププロセスは、制御プロセスからのログ情報を受け取ることはできません。制御プロセスからのログ情報とは、Webサーバ起動、停止時のエラーログ情報であり、これらの情報は採取できないことになります。Webサーバ起動後のエラーログ、アクセスログの情報はWebサーバプロセスからのログ情報となりますので、Webサーバプロセス用のパイププロセスで受け取れます。
-
プログラム作成時の留意点
制御プロセス用のパイププロセスは、NULデバイスからのデータ読み込み処理で、read()のバッファーが小さいと入力データ待ち状態が解除されないことがあります。read()のバッファーを十分大きい値を取るなどしてパイププロセスが入力データ待ち状態にならないようにしてください。
-
プログラムに引数を指定する場合の注意
プログラム、引数に空白を含む場合には、\"で囲んでください。
プログラム、引数を\"で囲む場合には、全体も\"で囲んでください。
(例)
CustomLog "| \"\"Application Serverのインストールディレクトリー/httpsd/sbin/rotatelogs.exe\" \"Application Serverのインストールディレクトリー/httpsd/logs/access\" 86400 -diff 540\"" common
-
プログラムの引数指定に誤りがある場合の注意
プログラムの引数指定に誤りがある場合、プログラムの起動に失敗しますが、Webサーバは起動します。この場合はログが出力されません。プログラムを指定した場合は、ログファイルが作成され、意図した分割が実施されることを確認してください。
-
- フォーマット
-
ログフォーマットを指定します。指定できるフォーマット名を次に示します。
表2‒1 フォーマット一覧 フォーマット
意味
%A※1
WebサーバのIPアドレス。
%a※1
クライアントのIPアドレス。
%B
送信バイト数(HTTPヘッダーおよびchunkedエンコーディングによって追加されたデータを除く)。
%b
送信バイト数(HTTPヘッダーおよびchunkedエンコーディングによって追加されたデータを除く)。ただし、0の場合は-(ハイフン)。
%{cookie_name}C
Cookieヘッダー値に含まれるCookie名cookie_nameの値。Cookieヘッダー値に複数のcookie_nameが見つかった場合、すべての値を出力する。
%D
リクエスト処理時間をマイクロ秒で表示。
%{env_name}e
env_nameに指定した環境変数の値。
%f
クライアントが要求したディレクトリーまたはファイル名。
%H
リクエストプロトコル(HTTP/1.0など)。
%h※2
クライアントのホスト名。
%I
リクエストとヘッダーを含む、全受信バイト数。
%{header_name}i
header_nameに指定したリクエストヘッダーの値。
%l
クライアントの識別情報(IdentityCheckディレクティブがOn、かつクライアント上でidentdが動作している場合)。
%m
リクエストメソッド(GET、POSTなど)。
%{note_name}n
note_nameに指定したWebサーバ内モジュールの注記の値。
-
hws_ap_root:ルートアプリケーション情報
-
hws_ap_client:クライアントアプリケーション情報
%O
ヘッダーを含む、全送信バイト数。
%{header_name}o
header_nameに指定したレスポンスヘッダーの値。
%P
HTTP通信のリクエストを処理するプロセスID。
%{hws_thread_id}P
HTTP通信のリクエストを処理するスレッドID。
%p
ServerNameディレクティブまたは<VirtualHost>の指定に従ったサーバのポート番号。
%q
問い合わせ文字列。
%r
HTTP通信のリクエストの先頭行。
%s
ステータス(内部リダイレクトされた場合はオリジナルを示す)。
%T
リクエスト処理に掛かった時間(秒)。HWSLogTimeVerboseディレクティブでOnを指定すると、ミリ秒単位まで表示。
%t
リクエスト処理を開始した時刻。HWSLogTimeVerboseディレクティブでOnを指定すると、ミリ秒単位まで表示。
%{format}t
リクエスト処理を開始した時刻。strftime()で定義されているフォーマットをformatに指定する。
%U
URL。
%u
クライアントのユーザー名(ユーザー認証をした場合)。
%V※2
UseCanonicalNameディレクティブの指定に従い、ServerNameディレクティブ指定値、サーバ名またはIPアドレス。
%v
サーバ名。
%X
レスポンス完了時の接続ステータス。
-
+:レスポンス送信後も接続を維持する。
-
−:レスポンス送信後に接続を切断する。
-
×:レスポンス完了前に接続を切断する。
%>s
最終ステータス。
- 注
-
フォーマットで示す{ }は選択を意味するものではありません。{ }内の太字はログを採取する変数名を、細字は文字列そのままを記述します。
- 注※1
-
フォーマットに%Aまたは%aを指定した場合、IPv6アドレスも出力できます。
- 注※2
-
フォーマットに%hまたは%Vを指定した場合、IPv6アドレスに対応したホスト名またはIPv6アドレスも出力できます。
表2‒2 SSL関連のログフォーマット一覧 フォーマット
意味
%{version}c
SSLのバージョン。
%{cipher}c
現在の通信で使用している暗号種別。
%{clientcert}c
SSLクライアント証明書のsubjectのDistinguished Name。
フォーマットの%の後ろにステータスコードを記述できます。
- (例)エラーステータスコード400および501の場合、User-Agentリクエストヘッダー値のログを採取する。
-
%400,501{User-Agent}i
- (例)エラーステータスコード200、304および302の3種類以外の場合、Refererリクエストヘッダー値のログを採取する。
-
%!200,304,302{Referer}i
また、env=は、指定した環境変数の設定によって、ログの採取を分ける場合に指定します。
- (例)gifへのアクセスはgif.logに、gif以外へのアクセスはnongif.logにログを採取する。
-
SetEnvIf Request-URI \.gif$ gif-image CustomLog logs/gif.log common env=gif-image CustomLog logs/nongif.log common env=!gif-image
-
- ラベル名
-
LogFormatディレクティブで定義したラベル名を指定します。
- env=環境変数
-
指定した環境変数が設定されている場合に、ログを採取します。
- env=!環境変数
-
指定した環境変数が設定されていない場合に、ログを採取します。
記述できる場所
httpsd.conf、<VirtualHost>
記述例
CustomLog logs/access.log common CustomLog logs/ssl.log "%t %{version}c %{cipher}c %{clientcert}c"