Модуль ngx_http_log_module
Модуль 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
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 этот размер не ограничен.
При включении буферизации данные будут записываться в файл:
- если следующая строка лога не помещается в буфер;
- если буферизованные данные старше, чем указано параметром
flush(1.3.10, 1.2.7); - когда процесс-работник переоткрывает файлы лога или завершается.
Если используется параметр gzip, буферизованные данные будут сжаты перед записью в файл. Уровень сжатия можно установить от 1 (наибольшая скорость, меньшее сжатие) до 9 (наименьшая скорость, наилучшее сжатие). По умолчанию размер буфера равен 64К байт, а уровень сжатия установлен в 1. Поскольку данные сжимаются в атомарных блоках, файл лога можно разархивировать или прочитать с помощью «zcat» в любое время.
Пример:
access_log /path/to/log.gz combined gzip flush=5m;
Для работы сжатия gzip nginx должен быть скомпилирован с библиотекой zlib.
Путь к файлу может содержать переменные (0.7.6+), но такие логи имеют некоторые ограничения:
- пользователь, чьи учетные данные используются процессами-работниками, должен иметь права на создание файлов в каталоге с такими логами;
- буферизованные записи не работают;
- файл открывается и закрывается для каждой записи лога. Однако, так как дескрипторы часто используемых файлов могут храниться в кэше, запись в старый файл может продолжаться в течение времени, указанного параметром open_log_file_cache
valid. - при каждой записи лога проверяется существование корневого каталога запроса корневой каталог, и если он не существует, лог не создается. Поэтому рекомендуется указать как корень, так и
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
name
[escape=default|json|none]
string ...; |
|---|---|
| По умолчанию: | 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- локальное время в формате Common Log Format
В современных версиях 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=time]
[min_uses=N]
[valid=time];open_log_file_cache off; |
|---|---|
| По умолчанию: | open_log_file_cache off; |
| Контекст: | http, server, location |
Определяет кэш, который хранит дескрипторы файлов часто используемых логов, имена которых содержат переменные. Директива имеет следующие параметры:
max- устанавливает максимальное количество дескрипторов в кэше; если кэш заполнится, закрываются наименее используемые (LRU) дескрипторы
inactive- устанавливает время, после которого кэшированный дескриптор закрывается, если в течение этого времени не было доступа; по умолчанию 10 секунд
min_uses- устанавливает минимальное количество использований файла за время, определенное параметром
inactive, чтобы дескриптор оставался открытым в кэше; по умолчанию 1 valid- устанавливает время, через которое нужно проверять, существует ли файл с таким же именем; по умолчанию 60 секунд
off- отключает кэширование
Пример использования:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_log_module.html