view xml/ru/docs/debugging_log.xml @ 1449:c79501e16e26

Documented cyclic memory buffer support for error_log.
author Yaroslav Zhuravlev <yar@nginx.com>
date Wed, 08 Apr 2015 13:56:52 +0300
parents d3390895fe6e
children 64ed0ce8ac5e
line wrap: on
line source

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

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

<article name="Отладочный лог"
         link="/ru/docs/debugging_log.html"
         lang="ru"
         rev="3">


<section>

<para>
Чтобы включить отладочный лог, при сборке следует сконфигурировать nginx с
поддержкой отладки:

<programlisting>
./configure --with-debug ...
</programlisting>

Затем нужно задать уровень <literal>debug</literal> с помощью
директивы <link doc="ngx_core_module.xml" id="error_log"/>:

<programlisting>
error_log /path/to/log debug;
</programlisting>

Бинарная версия nginx для Windows всегда собирается с поддержкой отладочного
лога, поэтому понадобится лишь задать уровень <literal>debug</literal>.
</para>

<para>
Обратите внимание, что переопределение лога без одновременного указания
уровня <literal>debug</literal> отключит отладочный лог.
В примере ниже, переопределение лога на уровне
<link doc="http/ngx_http_core_module.xml" id="server"/>
отключает отладочный лог для этого сервера:
<programlisting>
error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log;
        ...
</programlisting>
Чтобы избежать этого, следует либо закомментировать строку, переопределяющую
лог, либо добавить определение уровня <literal>debug</literal>:
<programlisting>
error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log debug;
        ...
</programlisting>
</para>

</section>


<section id="clients" name="Отладочный лог для определённых клиентов">

<para>
Можно включить отладочный лог только для
<link doc="ngx_core_module.xml" id="debug_connection">определённых
клиентских адресов</link>:

<programlisting>
error_log /path/to/log;

events {
    debug_connection 192.168.1.1;
    debug_connection 192.168.10.0/24;
}
</programlisting>
</para>

</section>


<section id="memory" name="Запись в кольцевой буфер в памяти">

<para>
Отладочный лог можно записывать в кольцевой буфер в памяти:
<programlisting>
error_log memory:32m debug;
</programlisting>
Запись в буфер в памяти на уровне <literal>debug</literal>
не оказывает существенного влияния на производительность
даже при высоких нагрузках.
В этом случае лог может быть извлечён при помощи
<command>gdb</command>-скрипта, подобного следующему:
<example>
set $log = ngx_cycle->new_log

while $log.writer != ngx_log_memory_writer
    set $log = $log.next
end

set $buf = (ngx_buf_t *) $log.wdata
dump binary memory log.txt $buf->start $buf->end
</example>
</para>

</section>

</article>