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