view xml/en/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="A debugging log"
         link="/en/docs/debugging_log.html"
         lang="en"
         rev="3">


<section>

<para>
To enable a debugging log, nginx needs to be configured to support
debugging during the build:

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

Then the <literal>debug</literal> level should be set with the
<link doc="ngx_core_module.xml" id="error_log"/> directive:

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

The nginx binary version for Windows is always built with the debugging log
support, so only setting the <literal>debug</literal> level will suffice.
</para>

<para>
Note that redefining the log without also specifying the
<literal>debug</literal>
level will disable the debugging log.
In the example below, redefining the log on the
<link doc="http/ngx_http_core_module.xml" id="server"/>
level disables the debugging log for this server:
<programlisting>
error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log;
        ...
</programlisting>
To avoid this, either the line redefining the log should be
commented out, or the <literal>debug</literal> level specification should
also be added:
<programlisting>
error_log /path/to/log debug;

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

</section>


<section id="clients" name="Debugging log for selected clients">

<para>
It is also possible to enable the debugging log for
<link doc="ngx_core_module.xml" id="debug_connection">selected
client addresses</link> only:

<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="Logging to a cyclic memory buffer">

<para>
The debugging log can be written to a cyclic memory buffer:
<programlisting>
error_log memory:32m debug;
</programlisting>
Logging to the memory buffer on the <literal>debug</literal> level
does not have significant impact on performance even under high load.
In this case, the log can be extracted using
a <command>gdb</command> script like the following one:
<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>