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
access_log |
---|---|
デフォルト: |
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ではこのサイズは制限されていません。
バッファリングが有効な場合、以下のデータはファイルに書き込まれるでしょう:
- 次のログの行がバッファに収まらない場合;
-
バッファされたデータが
flush
パラメータ (1.3.10, 1.2.7)で指定されたものより古い場合; - workerプロセスがログファイルをre-openingまたはシャットダウンする場合
もしgzip
パラメータが使われると、バッファされたデータはファイルに書き込む前に圧縮されるでしょう。圧縮レベルは1 (高速、低圧縮)から9(低速、高圧縮)の間で設定することができます。デフォルトでは、バッファサイズは64Kバイトで、圧縮レベルは1に設定されます。データは最小限のブロックで圧縮されるため、ログファイルはいつでも解凍または"zcat
"で読むことができます。
例:
access_log /path/to/log.gz combined gzip flush=5m;
gzip圧縮を動作させるには、nginxがzlibライブラリとビルドされていなければなりません。
ファイルパスには変数(0.7.6+)を含むことができますが、そのようなログには幾つかの制限があります:
- workerプロセスによって認証が使われたuserは、そのようなログがあるディレクトリにファイルを作る権限を持つ必要があります;
- バッファ書き込みが動作しません;
-
ファイルはそれぞれのログの書き込みごとに開かれ閉じられます。しかし、よく使われるファイルのディスクリプタは cacheに保持することができるため、open_log_file_cacheディレクティブの
valid
パラメータで指定される時間の間古いファイルへの書き込みを続けることができます。 -
ログの書き込みのたびにリクエストのroot directoryの存在がチェックされます。もし存在しなければログは作成されません。なのでrootと
access_log
を同じレベルで指定することは良い考えです:server { root /spool/vhost/data/$host; access_log /spool/vhost/logs/$host; ...
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
|
---|---|
デフォルト: |
log_format combined "..."; |
コンテキスト: |
http |
ログの書式を指定する。
escape
パラメータ (1.11.8) は変数内の json
あるいは default
文字エスケープをすることができます。デフォルトではdefault
エスケープが使われます。
ログの書式には共通の変数とログの書き込みの時のみ存在する変数があります:
$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
open_log_file_cache |
---|---|
デフォルト: |
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;