ngx_http_log_module モジュール

設定例
ディレクティブ
ディレクティブ     log_format
     open_log_file_cache

ngx_http_log_module モジュールは指定された書式でリクエストログを書きます。

リクエストは処理が終わったlocationのコンテキスト内で記録されます。もしリクエストの処理中にinternal redirectが起きたならば、元のlocationとは違うかも知れません。

設定例

log_format compression '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $bytes_sent '
                       '"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /spool/logs/nginx-access.log compression buffer=32k;

ディレクティブ

構文: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
デフォルト:
access_log logs/access.log combined;
コンテキスト: http, server, location, if in location, limit_except

バッファされたログのパス、書式と構成を設定します。幾つかのログは同じ設定レベルに指定されるかも知れません。syslogへの記録は最初のパラメータに"syslog:"プリフィックスを指定することで設定することができます。特別な値off は現在のレベルの全てのaccess_log ディレクティブを無効にします。フォーマットが指定されていなければ、あらかじめ定義された"combined"フォーマットが使われます。

もしbuffer または gzip (1.3.10, 1.2.7) パラメータのどちらかが使われると、記録への書き込みはバッファされます。

バッファのサイズはディスクファイルへの最小の書き込み単位のサイズを超えてはいけません。FreeBSDではこのサイズは制限されていません。

バッファリングが有効な場合、以下のデータはファイルに書き込まれるでしょう:

もしgzip パラメータが使われると、バッファされたデータはファイルに書き込む前に圧縮されるでしょう。圧縮レベルは1 (高速、低圧縮)から9(低速、高圧縮)の間で設定することができます。デフォルトでは、バッファサイズは64Kバイトで、圧縮レベルは1に設定されます。データは最小限のブロックで圧縮されるため、ログファイルはいつでも解凍または"zcat"で読むことができます。

例:

access_log /path/to/log.gz combined gzip flush=5m;

gzip圧縮を動作させるには、nginxがzlibライブラリとビルドされていなければなりません。

ファイルパスには変数(0.7.6+)を含むことができますが、そのようなログには幾つかの制限があります:

if パラメータ(1.7.0) は条件付きのログを有効にします。condition が"0" または空文字の時に、リクエストはログに記録されないでしょう。次の例では、応答コードが 2xx と 3xx のリクエストは記録されないでしょう:

map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;

構文: log_format name [escape=default|json|none] string ...;
デフォルト:
log_format combined "...";
コンテキスト: http

ログの書式を指定する。

escape パラメータ (1.11.8) は変数内の json あるいは default 文字エスケープをすることができます。デフォルトではdefault エスケープが使われます。none 値 (1.13.10) はエスケープを無効にします。

デフォルトのエスケープの場合、文字“"”、“\”、値が32(0.7.0)未満または126(1.1.6)より大きなその他の文字は“\xXX”としてエスケープされます。変数の値が定義されていない場合は、ハイフン(“-”)はログに記録されます。

jsonのエスケープの場合、JSON 文字列に許可されない全ての文字はエスケープされます: 文字“"”と“\”は“\"”と“\\”としてエスケープされ、値が32未満の文字は“\n”、“\r”、“\t”、“\b”、“\f”、“\u00XX”としてエスケープされます。

ログの書式には共通の変数とログの書き込みの時のみ存在する変数があります:

$bytes_sent
クライアントに送信されるバイト数
$connection
接続のシリアルナンバー
$connection_requests
一つの接続を通して作成される現在のリクエスト数(1.1.18)
$msec
ミリ秒の精度のログの書き込み時間の秒数
$pipe
リクエストがパイプラインされている場合は"p"、そうでなければ
$request_length
リクエストの長さ(リクエスト行、ヘッダとリクエストボディを含む)
$request_time
ミリ秒単位の精度のリクエストの処理時間; クライアントからの最初のバイトを読み込んでから最後のバイトがクライアントに送られてログが書き込まれるまでの経過時間
状態
応答ステータス
$time_iso8601
ISO 8601 標準フォーマットのローカルタイム
$time_local
Common Log フォーマットのローカルタイム

最新のnginxのバージョンでは、変数 $status (1.3.2, 1.2.2), $bytes_sent (1.3.8, 1.2.5), $connection (1.3.8, 1.2.5), $connection_requests (1.3.8, 1.2.5), $msec (1.3.9, 1.2.6), $request_time (1.3.9, 1.2.6), $pipe (1.3.12, 1.2.7), $request_length (1.3.12, 1.2.7), $time_iso8601 (1.3.12, 1.2.7), and $time_local (1.3.12, 1.2.7) も一般的な変数として使うことができます。

クライアントに送信されるヘッダ行は、プリフィックス"sent_http_" を持ちます。例えば $sent_http_content_range.

設定は常に事前に定義された"combined"フォーマットを含みます。

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

構文: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
デフォルト:
open_log_file_cache off;
コンテキスト: http, server, location

名前に変数を含む頻繁に使われるログファイルのファイルディスクリプタを保持するキャッシュを定義します。ディレクティブは次のパラメータを持ちます:

max
キャッシュ内のディスクリプタの最大数を設定します; もしキャッシュが一杯になると、最も使われていない(LRU)ディスクリプタが閉じられます。 closed
inactive
指定の期間アクセスされていないキャッシュのディスクリプタが閉じられる時間を定義します; デフォルトは 10秒です。
min_uses
inactive パラメータで定義された期間キャッシュの中でディスクリプタが開かれたままになるファイルの最小数を設定します; デフォルトは1です
valid
ファイルがまだ同じ名前で存在しているかをチェックすべき時間を設定します; デフォルトは 60秒です。
off
キャッシュを無効にします

利用例:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

TOP
inserted by FC2 system