Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/ru/docs/http/ngx_http_log_module.xml
1 views
1
<?xml version="1.0"?>
2
3
<!--
4
Copyright (C) Igor Sysoev
5
Copyright (C) Nginx, Inc.
6
-->
7
8
<!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
9
10
<module name="Модуль ngx_http_log_module"
11
link="/ru/docs/http/ngx_http_log_module.html"
12
lang="ru"
13
rev="21">
14
15
<section id="summary">
16
17
<para>
18
Модуль <literal>ngx_http_log_module</literal> записывает логи запросов
19
в указанном формате.
20
</para>
21
22
<para>
23
Логи записываются в контексте location’а, где заканчивается обработка.
24
Это может быть location, отличный от первоначального, если в процессе
25
обработки запроса происходит
26
<link doc="ngx_http_core_module.xml" id="internal">внутреннее
27
перенаправление</link>.
28
</para>
29
30
</section>
31
32
33
<section id="example" name="Пример конфигурации">
34
35
<para>
36
<example>
37
log_format compression '$remote_addr - $remote_user [$time_local] '
38
'"$request" $status $bytes_sent '
39
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
40
41
access_log /spool/logs/nginx-access.log compression buffer=32k;
42
</example>
43
</para>
44
45
</section>
46
47
48
<section id="directives" name="Директивы">
49
50
<directive name="access_log">
51
<syntax>
52
<value>путь</value>
53
[<value>формат</value>
54
[<literal>buffer</literal>=<value>размер</value>]
55
[<literal>gzip[=<value>степень</value>]</literal>]
56
[<literal>flush</literal>=<value>время</value>]
57
[<literal>if</literal>=<value>условие</value>]]</syntax>
58
<syntax><literal>off</literal></syntax>
59
<default>logs/access.log combined</default>
60
<context>http</context>
61
<context>server</context>
62
<context>location</context>
63
<context>if в location</context>
64
<context>limit_except</context>
65
66
<para>
67
Задаёт путь, формат и настройки буферизованной записи в лог.
68
На одном уровне конфигурации может использоваться несколько логов.
69
Запись в <link doc="../syslog.xml">syslog</link>
70
настраивается указанием префикса
71
<literal>syslog:</literal>” в первом параметре.
72
Специальное значение <literal>off</literal> отменяет все директивы
73
<literal>access_log</literal> для текущего уровня.
74
Если формат не указан, то используется предопределённый формат
75
<literal>combined</literal>”.
76
</para>
77
78
<para>
79
Если задан размер буфера с помощью параметра <literal>buffer</literal> или
80
указан параметр <literal>gzip</literal> (1.3.10, 1.2.7), то запись будет
81
буферизованной.
82
<note>
83
Размер буфера должен быть не больше размера атомарной записи в дисковый файл.
84
Для FreeBSD этот размер неограничен.
85
</note>
86
</para>
87
88
<para>
89
При включённой буферизации данные записываются в файл:
90
<list type="bullet">
91
92
<listitem>
93
если очередная строка лога не помещается в буфер;
94
</listitem>
95
96
<listitem>
97
если данные в буфере находятся дольше интервала времени, заданного
98
параметром <literal>flush</literal> (1.3.10, 1.2.7);
99
</listitem>
100
101
<listitem>
102
при <link doc="../control.xml">переоткрытии</link> лог-файла или
103
завершении рабочего процесса.
104
</listitem>
105
106
</list>
107
</para>
108
109
<para>
110
Если задан параметр <literal>gzip</literal>, то буфер будет сжиматься перед
111
записью в файл.
112
Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие)
113
до 9 (медленнее, но лучше сжатие).
114
По умолчанию используются буфер размером 64К байт и степень сжатия 1.
115
Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может
116
быть распакован или прочитан с помощью утилиты “<literal>zcat</literal>”.
117
</para>
118
119
<para>
120
Пример:
121
<example>
122
access_log /path/to/log.gz combined gzip flush=5m;
123
</example>
124
</para>
125
126
<para>
127
<note>
128
Для поддержки gzip-сжатия логов nginx должен быть собран с библиотекой zlib.
129
</note>
130
</para>
131
132
<para>
133
В пути файла можно использовать переменные (0.7.6+),
134
но такие логи имеют некоторые ограничения:
135
<list type="bullet">
136
137
<listitem>
138
<link doc="../ngx_core_module.xml" id="user">пользователь</link>,
139
с правами которого работают рабочие процессы, должен
140
иметь права на создание файлов в каталоге с такими логами;
141
</listitem>
142
143
<listitem>
144
не работает буферизация;
145
</listitem>
146
147
<listitem>
148
файл открывается для каждой записи в лог и сразу же после записи закрывается.
149
Следует однако иметь в виду, что поскольку дескрипторы часто используемых файлов
150
могут храниться в <link id="open_log_file_cache">кэше</link>,
151
то при вращении логов в течение времени, заданного параметром
152
<literal>valid</literal> директивы <link id="open_log_file_cache"/>,
153
запись может продолжаться в старый файл.
154
</listitem>
155
156
<listitem>
157
при каждой записи в лог проверяется существование
158
<link doc="ngx_http_core_module.xml" id="root">корневого каталога</link>
159
для запроса — если этот каталог не существует, то лог не создаётся.
160
Поэтому <link doc="ngx_http_core_module.xml" id="root"/>
161
и <literal>access_log</literal> нужно описывать на одном уровне конфигурации:
162
<example>
163
server {
164
root /spool/vhost/data/$host;
165
access_log /spool/vhost/logs/$host;
166
...
167
</example>
168
</listitem>
169
170
</list>
171
</para>
172
173
<para>
174
Параметр <literal>if</literal> (1.7.0) включает условную запись в лог.
175
Запрос не будет записываться в лог, если результатом вычисления
176
<value>условия</value> является “0” или пустая строка.
177
В следующем примере запросы с кодами ответа 2xx и 3xx
178
не будут записываться в лог:
179
<example>
180
map $status $loggable {
181
~^[23] 0;
182
default 1;
183
}
184
185
access_log /path/to/access.log combined if=$loggable;
186
</example>
187
</para>
188
189
</directive>
190
191
192
<directive name="log_format">
193
<syntax>
194
<value>название</value>
195
[<literal>escape</literal>=<literal>default</literal>|<literal>json</literal>|<literal>none</literal>]
196
<value>строка</value> ...</syntax>
197
<default>combined "..."</default>
198
<context>http</context>
199
200
<para>
201
Задаёт формат лога.
202
</para>
203
204
<para id="log_format_escape">
205
Параметр <literal>escape</literal> (1.11.8) позволяет задать
206
экранирование символов <literal>json</literal> или <literal>default</literal>
207
в переменных, по умолчанию используется <literal>default</literal>.
208
Значение <literal>none</literal> (1.13.10) отключает
209
экранирование символов.
210
</para>
211
212
<para id="log_format_escape_default">
213
При использовании <literal>default</literal>
214
символы “<literal>"</literal>”, “<literal>\</literal>”,
215
a также символы со значениями меньше 32 (0.7.0) или больше 126 (1.1.6)
216
экранируются как “<literal>\xXX</literal>”.
217
Если значение переменной не найдено,
218
то в качестве значения в лог будет записываться дефис (“<literal>-</literal>”).
219
</para>
220
221
<para id="log_format_escape_json">
222
При использовании <literal>json</literal>
223
экранируются все символы, недопустимые
224
в JSON <link url="https://datatracker.ietf.org/doc/html/rfc8259#section-7">строках</link>:
225
символы “<literal>"</literal>” и
226
<literal>\</literal>” экранируются как
227
<literal>\"</literal>” и “<literal>\\</literal>”,
228
символы со значениями меньше 32 экранируются как
229
<literal>\n</literal>”,
230
<literal>\r</literal>”,
231
<literal>\t</literal>”,
232
<literal>\b</literal>”,
233
<literal>\f</literal>” или
234
<literal>\u00XX</literal>”.
235
</para>
236
237
<para>
238
Кроме общих переменных в формате можно использовать переменные,
239
существующие только на момент записи в лог:
240
<list type="tag">
241
242
<tag-name id="var_bytes_sent"><var>$bytes_sent</var></tag-name>
243
<tag-desc>
244
число байт, переданное клиенту
245
</tag-desc>
246
247
<tag-name id="var_connection"><var>$connection</var></tag-name>
248
<tag-desc>
249
порядковый номер соединения
250
</tag-desc>
251
252
<tag-name id="var_connection_requests"><var>$connection_requests</var>
253
</tag-name>
254
<tag-desc>
255
текущее число запросов в соединении (1.1.18)
256
</tag-desc>
257
258
<tag-name id="var_msec"><var>$msec</var></tag-name>
259
<tag-desc>
260
время в секундах с точностью до миллисекунд на момент записи в лог
261
</tag-desc>
262
263
<tag-name id="var_pipe"><var>$pipe</var></tag-name>
264
<tag-desc>
265
<literal>p</literal>” если запрос был pipelined, иначе “<literal>.</literal>
266
</tag-desc>
267
268
<tag-name id="var_request_length"><var>$request_length</var></tag-name>
269
<tag-desc>
270
длина запроса (включая строку запроса, заголовок и тело запроса)
271
</tag-desc>
272
273
<tag-name id="var_request_time"><var>$request_time</var></tag-name>
274
<tag-desc>
275
время обработки запроса в секундах с точностью до миллисекунд;
276
время, прошедшее с момента чтения первых байт от клиента до
277
момента записи в лог после отправки последних байт клиенту
278
</tag-desc>
279
280
<tag-name id="var_status"><var>$status</var></tag-name>
281
<tag-desc>
282
статус ответа
283
</tag-desc>
284
285
<tag-name id="var_time_iso8601"><var>$time_iso8601</var></tag-name>
286
<tag-desc>
287
локальное время в формате по стандарту ISO 8601
288
</tag-desc>
289
290
<tag-name id="var_time_local"><var>$time_local</var></tag-name>
291
<tag-desc>
292
локальное время в Common Log Format
293
</tag-desc>
294
295
</list>
296
297
<note>
298
В современных версиях nginx переменные
299
<link doc="ngx_http_core_module.xml" id="var_status">$status</link>
300
(1.3.2, 1.2.2),
301
<link doc="ngx_http_core_module.xml" id="var_bytes_sent">$bytes_sent</link>
302
(1.3.8, 1.2.5),
303
<link doc="ngx_http_core_module.xml" id="var_connection">$connection</link>
304
(1.3.8, 1.2.5),
305
<link doc="ngx_http_core_module.xml" id="var_connection_requests">$connection_requests</link>
306
(1.3.8, 1.2.5),
307
<link doc="ngx_http_core_module.xml" id="var_msec">$msec</link>
308
(1.3.9, 1.2.6),
309
<link doc="ngx_http_core_module.xml" id="var_request_time">$request_time</link>
310
(1.3.9, 1.2.6),
311
<link doc="ngx_http_core_module.xml" id="var_pipe">$pipe</link>
312
(1.3.12, 1.2.7),
313
<link doc="ngx_http_core_module.xml" id="var_request_length">$request_length</link>
314
(1.3.12, 1.2.7),
315
<link doc="ngx_http_core_module.xml" id="var_time_iso8601">$time_iso8601</link>
316
(1.3.12, 1.2.7)
317
и
318
<link doc="ngx_http_core_module.xml" id="var_time_local">$time_local</link>
319
(1.3.12, 1.2.7)
320
также доступны как общие переменные.
321
</note>
322
323
</para>
324
325
<para>
326
Строки заголовка, переданные клиенту, начинаются с префикса
327
<literal>sent_http_</literal>”, например,
328
<var>$sent_http_content_range</var>.
329
</para>
330
331
<para>
332
В конфигурации всегда существует предопределённый формат
333
<literal>combined</literal>”:
334
<example>
335
log_format combined '$remote_addr - $remote_user [$time_local] '
336
'"$request" $status $body_bytes_sent '
337
'"$http_referer" "$http_user_agent"';
338
</example>
339
</para>
340
341
</directive>
342
343
344
<directive name="open_log_file_cache">
345
346
<syntax>
347
<literal>max</literal>=<value>N</value>
348
[<literal>inactive</literal>=<value>время</value>]
349
[<literal>min_uses</literal>=<value>N</value>]
350
[<literal>valid</literal>=<value>время</value>]</syntax>
351
<syntax><literal>off</literal></syntax>
352
<default>off</default>
353
<context>http</context>
354
<context>server</context>
355
<context>location</context>
356
357
<para>
358
Задаёт кэш, в котором хранятся дескрипторы файлов часто используемых
359
логов, имена которых заданы с использованием переменных.
360
Параметры директивы:
361
<list type="tag">
362
363
<tag-name><literal>max</literal></tag-name>
364
<tag-desc>
365
задаёт максимальное число дескрипторов в кэше;
366
при переполнении кэша наименее востребованные (LRU)
367
дескрипторы закрываются
368
</tag-desc>
369
370
<tag-name><literal>inactive</literal></tag-name>
371
<tag-desc>
372
задаёт время, после которого закэшированный дескриптор закрывается,
373
если к нему не было обращений в течение этого времени;
374
по умолчанию 10 секунд
375
</tag-desc>
376
377
<tag-name><literal>min_uses</literal></tag-name>
378
<tag-desc>
379
задаёт минимальное число использований файла в течение
380
времени, заданного параметром <literal>inactive</literal>,
381
после которого дескриптор файла будет оставаться открытым в кэше;
382
по умолчанию 1
383
</tag-desc>
384
385
<tag-name><literal>valid</literal></tag-name>
386
<tag-desc>
387
задаёт, через какое время нужно проверять, что файл ещё
388
существует под тем же именем;
389
по умолчанию 60 секунд
390
</tag-desc>
391
392
<tag-name><literal>off</literal></tag-name>
393
<tag-desc>
394
запрещает кэш
395
</tag-desc>
396
397
</list>
398
</para>
399
400
<para>
401
Пример использования:
402
<example>
403
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
404
</example>
405
</para>
406
407
</directive>
408
409
</section>
410
411
</module>
412
413