デバッグログ

特定のクライアントのデバッグログ
循環メモリバッファに対するログ記録

デバッグログを有効にするには、ビルド時にデバッグをサポートするようにnginxを設定する必要があります

./configure --with-debug ...

次に、debugレベルをerror_logディレクティブで設定する必要があります。

error_log /path/to/log debug;

nginxがデバッグをサポートするように設定されていることを確認するには、nginx -Vコマンドを実行します

configure arguments: --with-debug ...

あらかじめ構築されたLinuxパッケージは、コマンドを使用して実行できるnginx-debugバイナリ(1.9.8)を使用してデバッグログのすぐに利用可能なサポートを提供します

service nginx stop
service nginx-debug start

その後、debugレベルを設定します。Windows用のnginxバイナリバージョンは常にデバッグログサポートを使用して構築されているため、debugレベルを設定するだけで十分です。

debugレベルも指定せずにログを再定義すると、デバッグログが無効になることに注意してください。次の例では、serverレベルでログを再定義すると、このサーバーのデバッグログが無効になります。

error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log;
        ...

これを回避するには、ログを再定義する行をコメントアウトするか、debugレベルの指定も追加する必要があります。

error_log /path/to/log debug;

http {
    server {
        error_log /path/to/log debug;
        ...

特定のクライアントのデバッグログ

特定のクライアントアドレスに対してのみデバッグログを有効にすることも可能です。

error_log /path/to/log;

events {
    debug_connection 192.168.1.1;
    debug_connection 192.168.10.0/24;
}

循環メモリバッファに対するログ記録

デバッグログは循環メモリバッファに書き込むことができます。

error_log memory:32m debug;

debugレベルでメモリバッファにログを記録することは、負荷が高い場合でもパフォーマンスに大きな影響を与えません。この場合、ログは次のようなgdbスクリプトを使用して抽出できます。

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

あるいは、次のようなlldbスクリプトを使用します。

expr ngx_log_t *$log = ngx_cycle->log
expr while ($log->writer != ngx_log_memory_writer) { $log = $log->next; }
expr ngx_log_memory_buf_t *$buf = (ngx_log_memory_buf_t *) $log->wdata
memory read --force --outfile debug_log.txt --binary $buf->start $buf->end