Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
nginx
GitHub Repository: nginx/nginx.org
Path: blob/main/xml/ru/docs/debugging_log.xml
1 views
1
<!--
2
Copyright (C) Igor Sysoev
3
Copyright (C) Nginx, Inc.
4
-->
5
6
<!DOCTYPE article SYSTEM "../../../dtd/article.dtd">
7
8
<article name="Отладочный лог"
9
link="/ru/docs/debugging_log.html"
10
lang="ru"
11
rev="6">
12
13
14
<section>
15
16
<para>
17
Для работы отладочного лога nginx должен быть сконфигурирован с поддержкой
18
отладки на этапе сборки:
19
20
<programlisting>
21
./configure --with-debug ...
22
</programlisting>
23
24
Затем нужно задать уровень <literal>debug</literal> с помощью
25
директивы <link doc="ngx_core_module.xml" id="error_log"/>:
26
27
<programlisting>
28
error_log /path/to/log debug;
29
</programlisting>
30
31
Чтобы убедиться, что поддержка отладки сконфигурирована,
32
необходимо выполнить команду <command>nginx -V</command>:
33
34
<programlisting>
35
configure arguments: --with-debug ...
36
</programlisting>
37
38
Готовые пакеты для <link doc="../linux_packages.xml">Linux</link>
39
по умолчанию предоставляют поддержку отладочного лога
40
при помощи бинарного файла <literal>nginx-debug</literal> (1.9.8),
41
который можно запустить при помощи команд
42
43
<programlisting>
44
service nginx stop
45
service nginx-debug start
46
</programlisting>
47
48
и затем задать уровень <literal>debug</literal>.
49
Бинарная версия nginx для Windows всегда собирается с поддержкой отладочного
50
лога, поэтому понадобится лишь задать уровень <literal>debug</literal>.
51
</para>
52
53
<para>
54
Обратите внимание, что переопределение лога без одновременного указания
55
уровня <literal>debug</literal> отключит отладочный лог.
56
В примере ниже, переопределение лога на уровне
57
<link doc="http/ngx_http_core_module.xml" id="server"/>
58
отключает отладочный лог для этого сервера:
59
<programlisting>
60
error_log /path/to/log debug;
61
62
http {
63
server {
64
error_log /path/to/log;
65
...
66
</programlisting>
67
Чтобы избежать этого, следует либо закомментировать строку, переопределяющую
68
лог, либо добавить определение уровня <literal>debug</literal>:
69
<programlisting>
70
error_log /path/to/log debug;
71
72
http {
73
server {
74
error_log /path/to/log debug;
75
...
76
</programlisting>
77
</para>
78
79
</section>
80
81
82
<section id="clients" name="Отладочный лог для определённых клиентов">
83
84
<para>
85
Можно включить отладочный лог только для
86
<link doc="ngx_core_module.xml" id="debug_connection">определённых
87
клиентских адресов</link>:
88
89
<programlisting>
90
error_log /path/to/log;
91
92
events {
93
debug_connection 192.168.1.1;
94
debug_connection 192.168.10.0/24;
95
}
96
</programlisting>
97
</para>
98
99
</section>
100
101
102
<section id="memory" name="Запись в кольцевой буфер в памяти">
103
104
<para>
105
Отладочный лог можно записывать в кольцевой буфер в памяти:
106
<programlisting>
107
error_log memory:32m debug;
108
</programlisting>
109
Запись в буфер в памяти на уровне <literal>debug</literal>
110
не оказывает существенного влияния на производительность
111
даже при высоких нагрузках.
112
В этом случае лог может быть извлечён при помощи
113
<command>gdb</command>-скрипта, подобного следующему:
114
<example>
115
set $log = ngx_cycle->log
116
117
while $log->writer != ngx_log_memory_writer
118
set $log = $log->next
119
end
120
121
set $buf = (ngx_log_memory_buf_t *) $log->wdata
122
dump binary memory debug_log.txt $buf->start $buf->end
123
</example>
124
Или при помощи такого <command>lldb</command>-скрипта:
125
<example>
126
expr ngx_log_t *$log = ngx_cycle->log
127
expr while ($log->writer != ngx_log_memory_writer) { $log = $log->next; }
128
expr ngx_log_memory_buf_t *$buf = (ngx_log_memory_buf_t *) $log->wdata
129
memory read --force --outfile debug_log.txt --binary $buf->start $buf->end
130
</example>
131
</para>
132
133
</section>
134
135
</article>
136
137