Модуль stream_log#

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

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

log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';

access_log /spool/logs/angie-access.log basic buffer=32k;

Директивы#

access_log#

Синтаксис:

access_log путь [формат [buffer=размер] [gzip[=степень]] [flush=время] [if=условие]];
access_log off;

Умолчание:

access_log off;

Контекст:

stream, server

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

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

Осторожно

Размер буфера должен быть не больше размера атомарной записи в дисковый файл. Для FreeBSD этот размер неограничен.

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

  • если очередная строка лога не помещается в буфер;

  • если данные в буфере находятся дольше интервала времени, заданного параметром flush;

  • при переоткрытии лог-файла или завершении рабочего процесса.

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

Пример:

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

Важно

Для поддержки gzip-сжатия логов Angie PRO должен быть собран с библиотекой zlib.

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

  • пользователь, с правами которого работают рабочие процессы, должен иметь права на создание файлов в каталоге с такими логами;

  • не работает буферизация;

  • файл открывается для каждой записи в лог и сразу же после записи закрывается. Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов могут храниться в кэше, то при ротации логов в течение времени, заданного параметром valid директивы open_log_file_cache, запись может продолжаться в старый файл.

Параметр if включает условную запись в лог. Сессия не будет записываться в лог, если результатом вычисления условия является «0» или пустая строка.

log_format#

Синтаксис:

log_format имя [escape=default|json|none] строка …;

Умолчание:

Контекст:

stream

Задает формат лога, например:

log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

Параметр escape позволяет задать экранирование символов json или default в переменных, по умолчанию используется default. Значение none отключает экранирование символов.

При использовании default символы «"», «\», a также символы со значениями меньше 32 или больше 126 экранируются как «\xXX». Если значение переменной не найдено, то в качестве значения в лог будет записываться дефис «-«.

При использовании json экранируются все символы, недопустимые в JSON строках: символы «"» и «\» экранируются как «\»» и «\\», символы со значениями меньше 32 экранируются как «\n», «\r», «\t», «\b», «\f» или «\u00XX».

open_log_file_cache#

Синтаксис:

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;