デバッグログ
特定のクライアントのデバッグログ 循環メモリバッファに対するログ記録 |
デバッグログを有効にするには、ビルド時にデバッグをサポートするように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