Модуль 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 
    access_log  | 
                
|---|---|
| Умолчание: | 
            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), то запись будет
буферизованной.
Размер буфера должен быть не больше размера атомарной записи в дисковый файл. Для FreeBSD этот размер неограничен.
При включённой буферизации данные записываются в файл:
- если очередная строка лога не помещается в буфер;
 - 
если данные в буфере находятся дольше интервала времени, заданного
параметром 
flush(1.3.10, 1.2.7); - при переоткрытии лог-файла или завершении рабочего процесса.
 
Если задан параметр 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; ... 
Параметр if (1.7.0) включает условную запись в лог.
Запрос не будет записываться в лог, если результатом вычисления
условия является “0” или пустая строка.
В следующем примере запросы с кодами ответа 2xx и 3xx
не будут записываться в лог:
map $status $loggable {
    ~^[23]  0;
    default 1;
}
access_log /path/to/access.log combined if=$loggable;
| Синтаксис: | 
            log_format 
     | 
                
|---|---|
| Умолчание: | 
            log_format combined "...";  | 
                
| Контекст: | 
            http | 
                
Задаёт формат лога.
Параметр escape (1.11.8) позволяет задать
экранирование символов json или default
в переменных, по умолчанию используется default.
Значение none (1.13.10) отключает
экранирование символов.
При использовании default
символы “"”, “\”,
a также символы со значениями меньше 32 (0.7.0) или больше 126 (1.1.6)
экранируются как “\xXX”.
Если значение переменной не найдено,
то в качестве значения в лог будет записываться дефис (“-”).
При использовании json
экранируются все символы, недопустимые
в JSON строках:
символы “"” и
“\” экранируются как
“\"” и “\\”,
символы со значениями меньше 32 экранируются как
“\n”,
“\r”,
“\t”,
“\b”,
“\f” или
“\u00XX”.
Кроме общих переменных в формате можно использовать переменные, существующие только на момент записи в лог:
$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
 
В современных версиях nginx переменные $status (1.3.2, 1.2.2), $bytes_sent (1.3.8, 1.2.5), $connection (1.3.8, 1.2.5), $connection_requests (1.3.8, 1.2.5), $msec (1.3.9, 1.2.6), $request_time (1.3.9, 1.2.6), $pipe (1.3.12, 1.2.7), $request_length (1.3.12, 1.2.7), $time_iso8601 (1.3.12, 1.2.7) и $time_local (1.3.12, 1.2.7) также доступны как общие переменные.
Строки заголовка, переданные клиенту, начинаются с префикса
“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  | 
                
|---|---|
| Умолчание: | 
            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;