view xml/ru/docs/http/ngx_http_log_module.xml @ 2769:16f6fa718be2

Updated TLSv1.3 support notes. Previous notes described some early development snapshot of OpenSSL 1.1.1 with disabled TLSv1.3 by default. It was then enabled in the first alpha. Further, the updated text covers later major releases such as OpenSSL 3.0.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 30 Sep 2021 16:29:20 +0300
parents eeed494bba51
children 4add6ae1296f
line wrap: on
line source

<?xml version="1.0"?>

<!--
  Copyright (C) Igor Sysoev
  Copyright (C) Nginx, Inc.
  -->

<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">

<module name="Модуль ngx_http_log_module"
        link="/ru/docs/http/ngx_http_log_module.html"
        lang="ru"
        rev="21">

<section id="summary">

<para>
Модуль <literal>ngx_http_log_module</literal> записывает логи запросов
в указанном формате.
</para>

<para>
Логи записываются в контексте location’а, где заканчивается обработка.
Это может быть location, отличный от первоначального, если в процессе
обработки запроса происходит
<link doc="ngx_http_core_module.xml" id="internal">внутреннее
перенаправление</link>.
</para>

</section>


<section id="example" name="Пример конфигурации">

<para>
<example>
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;
</example>
</para>

</section>


<section id="directives" name="Директивы">

<directive name="access_log">
<syntax>
    <value>путь</value>
    [<value>формат</value>
    [<literal>buffer</literal>=<value>размер</value>]
    [<literal>gzip[=<value>степень</value>]</literal>]
    [<literal>flush</literal>=<value>время</value>]
    [<literal>if</literal>=<value>условие</value>]]</syntax>
<syntax><literal>off</literal></syntax>
<default>logs/access.log combined</default>
<context>http</context>
<context>server</context>
<context>location</context>
<context>if в location</context>
<context>limit_except</context>

<para>
Задаёт путь, формат и настройки буферизованной записи в лог.
На одном уровне конфигурации может использоваться несколько логов.
Запись в <link doc="../syslog.xml">syslog</link>
настраивается указанием префикса
“<literal>syslog:</literal>” в первом параметре.
Специальное значение <literal>off</literal> отменяет все директивы
<literal>access_log</literal> для текущего уровня.
Если формат не указан, то используется предопределённый формат
“<literal>combined</literal>”.
</para>

<para>
Если задан размер буфера с помощью параметра <literal>buffer</literal> или
указан параметр <literal>gzip</literal> (1.3.10, 1.2.7), то запись будет
буферизованной.
<note>
Размер буфера должен быть не больше размера атомарной записи в дисковый файл.
Для FreeBSD этот размер неограничен.
</note>
</para>

<para>
При включённой буферизации данные записываются в файл:
<list type="bullet">

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

<listitem>
если данные в буфере находятся дольше интервала времени, заданного
параметром <literal>flush</literal> (1.3.10, 1.2.7);
</listitem>

<listitem>
при <link doc="../control.xml">переоткрытии</link> лог-файла или
завершении рабочего процесса.
</listitem>

</list>
</para>

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

<para>
Пример:
<example>
access_log /path/to/log.gz combined gzip flush=5m;
</example>
</para>

<para>
<note>
Для поддержки gzip-сжатия логов nginx должен быть собран с библиотекой zlib.
</note>
</para>

<para>
В пути файла можно использовать переменные (0.7.6+),
но такие логи имеют некоторые ограничения:
<list type="bullet">

<listitem>
<link doc="../ngx_core_module.xml" id="user">пользователь</link>,
с правами которого работают рабочие процессы, должен
иметь права на создание файлов в каталоге с такими логами;
</listitem>

<listitem>
не работает буферизация;
</listitem>

<listitem>
файл открывается для каждой записи в лог и сразу же после записи закрывается.
Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов
могут храниться в <link id="open_log_file_cache">кэше</link>,
то при вращении логов в течение времени, заданного параметром
<literal>valid</literal> директивы <link id="open_log_file_cache"/>,
запись может продолжаться в старый файл.
</listitem>

<listitem>
при каждой записи в лог проверяется существование
<link doc="ngx_http_core_module.xml" id="root">корневого каталога</link>
для запроса — если этот каталог не существует, то лог не создаётся.
Поэтому <link doc="ngx_http_core_module.xml" id="root"/>
и <literal>access_log</literal> нужно описывать на одном уровне конфигурации:
<example>
server {
    root       /spool/vhost/data/$host;
    access_log /spool/vhost/logs/$host;
    ...
</example>
</listitem>

</list>
</para>

<para>
Параметр <literal>if</literal> (1.7.0) включает условную запись в лог.
Запрос не будет записываться в лог, если результатом вычисления
<value>условия</value> является “0” или пустая строка.
В следующем примере запросы с кодами ответа 2xx и 3xx
не будут записываться в лог:
<example>
map $status $loggable {
    ~^[23]  0;
    default 1;
}

access_log /path/to/access.log combined if=$loggable;
</example>
</para>

</directive>


<directive name="log_format">
<syntax>
    <value>название</value>
    [<literal>escape</literal>=<literal>default</literal>|<literal>json</literal>|<literal>none</literal>]
    <value>строка</value> ...</syntax>
<default>combined "..."</default>
<context>http</context>

<para>
Задаёт формат лога.
</para>

<para id="log_format_escape">
Параметр <literal>escape</literal> (1.11.8) позволяет задать
экранирование символов <literal>json</literal> или <literal>default</literal>
в переменных, по умолчанию используется <literal>default</literal>.
Значение <literal>none</literal> (1.13.10) отключает
экранирование символов.
</para>

<para id="log_format_escape_default">
При использовании <literal>default</literal>
символы “<literal>"</literal>”, “<literal>\</literal>”,
a также символы со значениями меньше 32 (0.7.0) или больше 126 (1.1.6)
экранируются как “<literal>\xXX</literal>”.
Если значение переменной не найдено,
то в качестве значения в лог будет записываться дефис (“<literal>-</literal>”).
</para>

<para id="log_format_escape_json">
При использовании <literal>json</literal>
экранируются все символы, недопустимые
в JSON <link url="https://tools.ietf.org/html/rfc8259#section-7">строках</link>:
символы “<literal>"</literal>” и
“<literal>\</literal>” экранируются как
“<literal>\"</literal>” и “<literal>\\</literal>”,
символы со значениями меньше 32 экранируются как
“<literal>\n</literal>”,
“<literal>\r</literal>”,
“<literal>\t</literal>”,
“<literal>\b</literal>”,
“<literal>\f</literal>” или
“<literal>\u00XX</literal>”.
</para>

<para>
Кроме общих переменных в формате можно использовать переменные,
существующие только на момент записи в лог:
<list type="tag">

<tag-name id="var_bytes_sent"><var>$bytes_sent</var></tag-name>
<tag-desc>
число байт, переданное клиенту
</tag-desc>

<tag-name id="var_connection"><var>$connection</var></tag-name>
<tag-desc>
порядковый номер соединения
</tag-desc>

<tag-name id="var_connection_requests"><var>$connection_requests</var>
</tag-name>
<tag-desc>
текущее число запросов в соединении (1.1.18)
</tag-desc>

<tag-name id="var_msec"><var>$msec</var></tag-name>
<tag-desc>
время в секундах с точностью до миллисекунд на момент записи в лог
</tag-desc>

<tag-name id="var_pipe"><var>$pipe</var></tag-name>
<tag-desc>
“<literal>p</literal>” если запрос был pipelined, иначе “<literal>.</literal>”
</tag-desc>

<tag-name id="var_request_length"><var>$request_length</var></tag-name>
<tag-desc>
длина запроса (включая строку запроса, заголовок и тело запроса)
</tag-desc>

<tag-name id="var_request_time"><var>$request_time</var></tag-name>
<tag-desc>
время обработки запроса в секундах с точностью до миллисекунд;
время, прошедшее с момента чтения первых байт от клиента до
момента записи в лог после отправки последних байт клиенту
</tag-desc>

<tag-name id="var_status"><var>$status</var></tag-name>
<tag-desc>
статус ответа
</tag-desc>

<tag-name id="var_time_iso8601"><var>$time_iso8601</var></tag-name>
<tag-desc>
локальное время в формате по стандарту ISO 8601
</tag-desc>

<tag-name id="var_time_local"><var>$time_local</var></tag-name>
<tag-desc>
локальное время в Common Log Format
</tag-desc>

</list>

<note>
В современных версиях nginx переменные
<link doc="ngx_http_core_module.xml" id="var_status">$status</link>
(1.3.2, 1.2.2),
<link doc="ngx_http_core_module.xml" id="var_bytes_sent">$bytes_sent</link>
(1.3.8, 1.2.5),
<link doc="ngx_http_core_module.xml" id="var_connection">$connection</link>
(1.3.8, 1.2.5),
<link doc="ngx_http_core_module.xml" id="var_connection_requests">$connection_requests</link>
(1.3.8, 1.2.5),
<link doc="ngx_http_core_module.xml" id="var_msec">$msec</link>
(1.3.9, 1.2.6),
<link doc="ngx_http_core_module.xml" id="var_request_time">$request_time</link>
(1.3.9, 1.2.6),
<link doc="ngx_http_core_module.xml" id="var_pipe">$pipe</link>
(1.3.12, 1.2.7),
<link doc="ngx_http_core_module.xml" id="var_request_length">$request_length</link>
(1.3.12, 1.2.7),
<link doc="ngx_http_core_module.xml" id="var_time_iso8601">$time_iso8601</link>
(1.3.12, 1.2.7)
и
<link doc="ngx_http_core_module.xml" id="var_time_local">$time_local</link>
(1.3.12, 1.2.7)
также доступны как общие переменные.
</note>

</para>

<para>
Строки заголовка, переданные клиенту, начинаются с префикса
“<literal>sent_http_</literal>”, например,
<var>$sent_http_content_range</var>.
</para>

<para>
В конфигурации всегда существует предопределённый формат
“<literal>combined</literal>”:
<example>
log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';
</example>
</para>

</directive>


<directive name="open_log_file_cache">

<syntax>
<literal>max</literal>=<value>N</value>
[<literal>inactive</literal>=<value>время</value>]
[<literal>min_uses</literal>=<value>N</value>]
[<literal>valid</literal>=<value>время</value>]</syntax>
<syntax><literal>off</literal></syntax>
<default>off</default>
<context>http</context>
<context>server</context>
<context>location</context>

<para>
Задаёт кэш, в котором хранятся дескрипторы файлов часто используемых
логов, имена которых заданы с использованием переменных.
Параметры директивы:
<list type="tag">

<tag-name><literal>max</literal></tag-name>
<tag-desc>
задаёт максимальное число дескрипторов в кэше;
при переполнении кэша наименее востребованные (LRU)
дескрипторы закрываются
</tag-desc>

<tag-name><literal>inactive</literal></tag-name>
<tag-desc>
задаёт время, после которого закэшированный дескриптор закрывается,
если к нему не было обращений в течение этого времени;
по умолчанию 10 секунд
</tag-desc>

<tag-name><literal>min_uses</literal></tag-name>
<tag-desc>
задаёт минимальное число использований файла в течение
времени, заданного параметром <literal>inactive</literal>,
после которого дескриптор файла будет оставаться открытым в кэше;
по умолчанию 1
</tag-desc>

<tag-name><literal>valid</literal></tag-name>
<tag-desc>
задаёт, через какое время нужно проверять, что файл ещё
существует под тем же именем;
по умолчанию 60 секунд
</tag-desc>

<tag-name><literal>off</literal></tag-name>
<tag-desc>
запрещает кэш
</tag-desc>

</list>
</para>

<para>
Пример использования:
<example>
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
</example>
</para>

</directive>

</section>

</module>