Модуль ngx_http_log_module

Разделы

Пример конфигурации
Директивы
     access_log
     log_format
     open_log_file_cache

Модуль ngx_http_log_module записывает логи запросов в указанном формате.

Логи записываются в контексте location’а, где заканчивается обработка. Это может быть 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 путь [формат [buffer=размер [flush=время]] [if=условие]];
access_log путь формат gzip[=степень] [buffer=размер] [flush=время] [if=условие];
access_log syslog:server=адрес[,параметр=значение] [формат [if=условие]];
access_log off;
умолчание:
access_log logs/access.log combined;
контекст: http, server, location, if в location, limit_except

Задаёт путь, формат и настройки буферизованной записи в лог. На одном уровне может использоваться несколько логов. Запись в syslog настраивается указанием префикса “syslog:” в первом параметре. Специальное значение off отменяет все директивы access_log для текущего уровня. Если формат не указан, то используется предопределённый формат “combined”.

Если задан размер буфера с помощью параметра buffer или указан параметр gzip (1.3.10, 1.2.7), то запись будет буферизованной.

При включённой буферизации данные записываются в файл:

  • если очередная строка лога не помещается в буфер;
  • если данные в буфере находятся дольше интервала времени, заданного параметром flush (1.3.10, 1.2.7);
  • при переоткрытии лог-файла или завершении рабочего процесса.

Если задан параметр gzip, то буфер будет сжиматься перед записью в файл. Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие) до 9 (медленнее, но лучше сжатие). По умолчанию используются буфер размером 64К байт и степень сжатия 1. Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может быть распакован или прочитан с помощью утилиты “zcat”.

Пример:

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

В пути файла можно использовать переменные (0.7.6+), но такие логи имеют некоторые ограничения:

  • пользователь, с правами которого работают рабочие процессы, должен иметь права на создание файлов в каталоге с такими логами;
  • не работает буферизация;
  • файл открывается для каждой записи в лог и сразу же после записи закрывается. Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов могут храниться в кэше, то при вращении логов в течение времени, заданного параметром valid директивы open_log_file_cache, запись может продолжаться в старый файл.
  • при каждой записи в лог проверяется существование корневого каталога для запроса — если этот каталог не существует, то лог не создаётся. Поэтому root и access_log нужно описывать на одном уровне:
    server {
        root       /spool/vhost/data/$host;
        access_log /spool/vhost/logs/$host;
        ...
    

Параметр if (1.7.0) включает условную запись в лог. Запрос не будет записываться в лог, если результатом вычисления условия является “0” или пустая строка. В следующем примере запросы с кодами ответа 2xx и 3xx не будут записываться в лог:

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

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

Запись в syslog настраивается при помощи следующих параметров:

server=адрес
Задаёт адрес сервера syslog. Адрес может быть указан в виде доменного имени, IP-адреса или в виде пути UNIX-сокета (указывается после префикса “unix:”). Вместе с именем или адресом может быть указан порт. Если порт не указан, используется порт 514. Если доменному имени соответствует несколько IP-адресов, используется только первый адрес.
facility=строка
Задаёт категорию сообщений syslog в соответствии с RFC 3164. В качестве категории может быть указано одно из следующих значений: “kern”, “user”, “mail”, “daemon”, “auth”, “intern”, “lpr”, “news”, “uucp”, “clock”, “authpriv”, “ftp”, “ntp”, “audit”, “alert”, “cron”, “local0”..“local7”. По умолчанию используется “local7”.
severity=строка
Задаёт важность сообщений syslog в соответствии с RFC 3164. Возможны те же самые значения, что и у второго параметра (уровень) директивы error_log. По умолчанию используется “info”.
tag=строка
Задаёт метку сообщений syslog. По умолчанию используется “nginx”.

Пример конфигурации syslog:

access_log syslog:server=192.168.1.1;
access_log syslog:server=unix:/var/log/nginx.sock;
access_log syslog:server=[2001:db8::1]:12345,facility=local7,tag=nginx,severity=info combined;

синтаксис: log_format название строка ...;
умолчание:
log_format combined "...";
контекст: http

Задаёт формат лога.

Кроме общих переменных в формате можно использовать переменные, существующие только на момент записи в лог:

$bytes_sent
число байт, переданное клиенту
$connection
порядковый номер соединения
$connection_requests
текущее число запросов в соединении (1.1.18)
$msec
время в секундах с точностью до миллисекунд на момент записи в лог
$pipe
p” если запрос был pipelined, иначе “.
$request_length
длина запроса (включая строку запроса, заголовок и тело запроса)
$request_time
время обработки запроса в секундах с точностью до миллисекунд; время, прошедшее с момента чтения первых байт от клиента до момента записи в лог после отправки последних байт клиенту
$status
статус ответа
$time_iso8601
локальное время в формате по стандарту ISO 8601
$time_local
локальное время в Common Log Format

Строки заголовка, переданные клиенту, начинаются с префикса “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;
контекст: 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;

    Поддержать сайт на родительском проекте КГБ