モジュール ngx_http_log_module

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

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

リクエストは、処理が終了したロケーションのコンテキストでログに記録されます。リクエスト処理中に内部リダイレクトが発生した場合、元のロケーションとは異なる場合があります。

設定例

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 パス [フォーマット [buffer=サイズ] [gzip[=レベル]] [flush=時間] [if=条件]];
access_log off;
デフォルト
access_log logs/access.log combined;
コンテキスト httpserverlocationif in locationlimit_except

バッファされたログ書き込みのパス、フォーマット、および設定を設定します。同じ設定レベルで複数のログを指定できます。syslogへのログ記録は、最初の引数に「syslog:」プレフィックスを指定することで設定できます。特殊値offは、現在のレベルにあるすべてのaccess_logディレクティブをキャンセルします。フォーマットが指定されていない場合、事前に定義された「combined」フォーマットが使用されます。

bufferまたはgzip(1.3.10、1.2.7)パラメーターのいずれかが使用されている場合、ログへの書き込みはバッファリングされます。

バッファーサイズは、ディスクファイルへのアトミック書き込みのサイズを超えてはなりません。FreeBSDでは、このサイズは無制限です。

バッファリングが有効になっている場合、データはファイルに書き込まれます。

gzipパラメーターが使用されている場合、バッファリングされたデータはファイルに書き込む前に圧縮されます。圧縮レベルは1(最速、圧縮率が低い)から9(最遅、圧縮率が高い)の間で設定できます。デフォルトでは、バッファーサイズは64KB、圧縮レベルは1に設定されています。データはアトミックブロックで圧縮されるため、ログファイルはいつでも「zcat」で解凍または読み取ることができます。

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

gzip圧縮を動作させるには、nginxをzlibライブラリでビルドする必要があります。

ファイルパスには変数を含めることができます(0.7.6以降)。ただし、そのようなログにはいくつかの制約があります。

ifパラメーター(1.7.0)により、条件付きログ記録が有効になります。条件が「0」または空文字列に評価された場合、リクエストはログに記録されません。次の例では、応答コードが2xxと3xxのリクエストはログに記録されません。

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

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

構文 log_format 名前 [escape=default|json|none] 文字列 ...;
デフォルト
log_format combined "...";
コンテキスト http

ログフォーマットを指定します。

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

defaultエスケープの場合、「"」、「\」、および値が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
ミリ秒単位の精度での秒数でのリクエスト処理時間。クライアントから最初のバイトが読み取られてから、最後のバイトがクライアントに送信された後のログ書き込みまでの経過時間
$status
レスポンスステータス
$time_iso8601
ISO 8601標準形式のローカル時間
$time_local
共通ログ形式のローカル時間

最新の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)、および$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=時間] [min_uses=N] [valid=時間];
open_log_file_cache off;
デフォルト
open_log_file_cache off;
コンテキスト httpserverlocation

変数を含む名前の頻繁に使用されるログのファイルディスクリプタを格納するキャッシュを定義します。このディレクティブには次のパラメーターがあります。

max
キャッシュ内のディスクリプタの最大数を設定します。キャッシュがいっぱいになると、最近使用されていない(LRU)ディスクリプタが閉じられます。
inactive
この時間内にアクセスがない場合、キャッシュされたディスクリプタが閉じられるまでの時間を設定します。デフォルトは10秒です。
min_uses
inactiveパラメーターで定義された時間内にファイルが使用された最小回数を設定します。これにより、ディスクリプタはキャッシュ内で開いたままになります。デフォルトは1です。
valid
同じ名前のファイルがまだ存在するかどうかを確認するまでの時間を設定します。デフォルトは60秒です。
off
キャッシングを無効にします。

使用例

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