Модуль http_log
#
Модуль записывает логи запросов в указанном формате.
Логи записываются в контексте 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/angie-access.log compression buffer=32k;
Директивы#
access_log#
- Синтаксис:
access_log
путь [формат [buffer=размер] [gzip[=степень]] [flush=время] [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, то запись будет буферизованной.
Осторожно
Размер буфера должен быть не больше размера атомарной записи в дисковый файл. Для FreeBSD этот размер неограничен.
При включённой буферизации данные записываются в файл:
если очередная строка лога не помещается в буфер;
если данные в буфере находятся дольше интервала времени, заданного параметром flush;
при переоткрытии лог-файла или завершении рабочего процесса.
Если задан параметр gzip, то буфер будет сжиматься перед записью в файл. Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие) до 9 (медленнее, но лучше сжатие). По умолчанию используются буфер размером 64К байт и степень сжатия 1. Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может быть распакован или прочитан с помощью утилиты «zcat».
Пример:
access_log /path/to/log.gz combined gzip flush=5m;
Важно
Для поддержки gzip-сжатия логов Angie должен быть собран с библиотекой zlib.
В пути файла можно использовать переменные, но такие логи имеют некоторые ограничения:
пользователь, с правами которого работают рабочие процессы, должен иметь права на создание файлов в каталоге с такими логами;
не работает буферизация;
файл открывается для каждой записи в лог и сразу же после записи закрывается. Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов могут храниться в кэше, то при ротации логов в течение времени, заданного параметром valid директивы open_log_file_cache, запись может продолжаться в старый файл.
при каждой записи в лог проверяется существование корневого каталога для запроса — если этот каталог не существует, то лог не создаётся. Поэтому root и access_log нужно описывать на одном уровне конфигурации:
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...
Параметр if включает условную запись в лог. Запрос не будет записываться в лог, если результатом вычисления условия является «0» или пустая строка. В следующем примере запросы с кодами ответа 2xx и 3xx не будут записываться в лог:
map $status $loggable {
~^[23] 0;
default 1;
}
access_log /path/to/access.log combined if=$loggable;
log_format#
- Синтаксис:
log_format
имя [escape=default | json | none] строка …;- Умолчание:
log_format combined "...";
- Контекст:
http
Задаёт формат лога.
Параметр escape позволяет задать экранирование символов json или default в переменных, по умолчанию используется default. Значение none отключает экранирование символов.
При использовании default символы «"», «\», a также символы со значениями меньше 32 или больше 126 экранируются как «\xXX». Если значение переменной не найдено, то в качестве значения в лог будет записываться дефис «-«.
При использовании json экранируются все символы, недопустимые в JSON строках: символы «"» и «\» экранируются как «\"» и «\\», символы со значениями меньше 32 экранируются как «\n», «\r», «\t», «\b», «\f» или «\u00XX».
Строки заголовка, переданные клиенту, начинаются с префикса 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#
- Синтаксис:
open_log_file_cache
max=N [inactive=время] [min_uses=N] [valid=время];open_log_file_cache
off;- Умолчание:
open_log_file_cache off;
- Контекст:
http, server, location
Задаёт кэш, в котором хранятся дескрипторы файлов часто используемых логов, имена которых заданы с использованием переменных. Параметры:
|
задаёт максимальное число дескрипторов в кэше; при переполнении кэша наименее востребованные (LRU) дескрипторы закрываются |
|
задаёт время, после которого закэшированный дескриптор закрывается, если к нему не было обращений в течение этого времени; |
|
задаёт минимальное число использований файла в течение времени, заданного параметром inactive, после которого дескриптор файла будет оставаться открытым в кэше; |
|
задаёт, через какое время нужно проверять, что файл ещё существует под тем же именем; |
|
запрещает кэш |
Пример использования:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;