|
Модуль 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=время]]];
access_log
путь
формат
gzip[=степень]
[buffer=размер]
[flush=время];
access_log off;
|
|
умолчание:
|
access_log logs/access.log combined;
|
|
контекст:
|
http, server, location, if в location, limit_except
|
Задаёт путь, формат и настройки буферизованной записи в лог.
На одном уровне может использоваться несколько логов.
Специальное значение off отменяет все директивы
access_log для текущего уровня.
Если формат не указан, то используется предопределённый формат
“combined”.
Если задан размер буфера с помощью параметра buffer или
указан параметр gzip (1.3.10), то запись будет
буферизованной.
Размер буфера должен быть не больше размера атомарной записи в дисковый файл.
Для FreeBSD этот размер неограничен.
При включённой буферизации данные записываются в файл:
-
если очередная строка лога не помещается в буфер;
-
если данные в буфере находятся дольше интервала времени, заданного
параметром
flush (1.3.10);
-
при переоткрытии лог-файла или
завершении рабочего процесса.
Если задан параметр gzip, то буфер будет сжиматься перед
записью в файл.
Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие)
до 9 (медленнее, но лучше сжатие).
По умолчанию используется буфер размером 64К байт и степень сжатия 1.
Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может
быть распакован или прочитан с помощью утилиты “zcat”.
Пример:
access_log /path/to/log.gz combined gzip flush=5m;
Для поддержки gzip-сжатия логов nginx должен быть собран с библиотекой zlib.
В пути файла можно использовать переменные (0.7.6+),
но такие логи имеют некоторые ограничения:
-
пользователь,
с правами которого работают рабочие процессы, должен
иметь права на создание файлов в каталоге с такими логами;
-
не работает буферизация;
-
файл открывается для каждой записи в лог и сразу же после записи закрывается.
Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов
могут храниться в кэше,
то при вращении логов в течение времени, заданного параметром
valid директивы open_log_file_cache,
запись может продолжаться в старый файл.
-
при каждой записи в лог проверяется существование
корневого каталога
для запроса — если этот каталог не существует, то лог не создаётся.
Поэтому root
и
access_log нужно описывать на одном уровне:
server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...
|
синтаксис:
|
log_format
название
строка ...;
|
|
умолчание:
|
log_format combined "...";
|
|
контекст:
|
http
|
Задаёт формат лога.
Кроме общих переменных в формате можно использовать переменные,
существующие только на момент записи в лог:
$bytes_sent
-
число байт, переданное клиенту
Начиная с версий 1.3.8 и 1.2.5 существует общая переменная с
тем же
именем.
$connection
-
порядковый номер соединения
Начиная с версий 1.3.8 и 1.2.5 существует общая переменная с
тем же
именем.
$connection_requests
-
текущее число запросов в соединении (1.1.18)
Начиная с версий 1.3.8 и 1.2.5 существует общая переменная с
тем же
именем.
$msec
-
время в секундах с точностью до миллисекунд на момент записи в лог
Начиная с версий 1.3.9 и 1.2.6 существует общая переменная с
тем же именем.
$pipe
-
“
p” если запрос был pipelined, иначе “.”
$request_length
-
длина запроса (включая строку запроса, заголовок и тело запроса)
$request_time
-
время обработки запроса в секундах с точностью до миллисекунд;
время, прошедшее с момента чтения первых байт от клиента до
момента записи в лог после отправки последних байт клиенту
Начиная с версий 1.3.9 и 1.2.6 существует общая переменная с
тем же именем.
$status
-
статус ответа
Начиная с версий 1.3.2 и 1.2.2 существует общая переменная с
тем же именем.
$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;
|