ngx_http_log_module
Examples
log_format gzip '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log gzip buffer=32k;
Directives
access_log
syntax: access_log path [format [buffer=size]] | off
default: access_log log/access.log combined
context: http, server, location
Directive access_log assigns path, format and size of buffer for buffered writing into log file. Using "off" as the only parameter clears all access_log directives for the current level. If format is not indicated, then predetermined format "combined". The size of buffer must be not more than the size of atomic record into the disk file. This size is not limited for FreeBSD 3.0-6.0.
Path can contain variables (version >=0.7.4) but such logs have some limitations:
- worker user must have permission to create files in;
- buffering does not work;
for each log entry file is opened and immediately closed after the record. But descriptors of frequently used files may be stored in open_log_file_cache. With the log rotation must be kept in mind that over time, witch is set by parameter valid of directive open_log_file_cache, recording can be still continued to old file.
log_format
syntax: log_format name format [format ...]
default: log_format combined "..."
context: http server
Directive log_format describes the format of a log entry. Besides general variables in the format it is possible to use variables which exist only at the moment of record into the log:
- $body_bytes_sent, the number of bytes, transmitted to client minus the response headers, variable is compatible with parameter %B of module Apache's mod_log_config (this was called $apache_bytes_sent, before version 0.3.10)
- $bytes_sent, the number of bytes, transmitted to client
- $connection, the number of connection
- $msec, the time with an accuracy to microseconds at the moment of the log entry
$pipe, "p" if request was pipelining
- $request_length, the length of the body of the request
- $request_time, the time of working on request in seconds, since 0.5.19 in millisecond precision
- $status, status of answer
- $time_local, local time into common log format.
- $http_x_forwarded_for, X-Forward infomation
The headers, transmitted to client, begin from the prefix "sent_http_", for example, $sent_http_content_range.
Note that variables produced by other modules can also be logged. For example you can log upstream response headers with the prefix "upstream_http_", see upstream.
In the configuration there is always a predetermined format "combined":
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
open_log_file_cache
syntax: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off
default: open_log_file_cache off
context: http server location
The directive sets the cache, which stores file descriptors of frequently used logs with variable in path.
Directive options:
- max - maximal number of descriptors in the cache, with overflow Least Recently Used is removed (LRU);
- inactive - sets the time after which descriptor without hits during this time are removed; default is 10 seconds;
min_uses - sets the minimum number of file usage within the time specified in parameter inactive, after which the file descriptor will be put in the cache; default is 1;
- valid - sets the time until it will be checked if file still exists under same name; default is 60 seconds;
- off - disables the cache.
Example:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;
