view xml/en/docs/debugging_log.xml @ 1878:127ae107e5a9

Removed clause about shared memory and Windows versions with ASLR. Starting with nginx 1.9.0 shared memory can be used on Windows versions with address space layout randomization.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 26 Dec 2016 19:38:06 +0300
parents 0108c6525d2a
children b274d289798d
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="5">


<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>

To verify that nginx is configured to support debugging,
run the <command>nginx -V</command> command:

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

Pre-built <link doc="../linux_packages.xml">Linux</link> packages
provide out-of-the-box support for debugging log with
the <literal>nginx-debug</literal> binary (1.9.8)
which can be run using commands

<programlisting>
service nginx stop
service nginx-debug start
</programlisting>

and then set the <literal>debug</literal> level.
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->log

while $log->writer != ngx_log_memory_writer
    set $log = $log->next
end

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

</section>

</article>