Spec-Zone.ru › nginx

Модуль 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 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API