Un journal de bord de débogage
Pour activer un journal de débogage, nginx doit être configuré pour prendre en charge le débogage pendant la construction :
./configure --with-debug ... |
Ensuite, le niveau de débogage doit être défini avec la directive error_log :
error_log /path/to/log debug; |
Pour vérifier que nginx est configuré pour prendre en charge le débogage, exécutez la commande :
nginx -V |
on obtiendra :
configure arguments: --with-debug ... |
Les paquets Linux pré-compilés fournissent un support prêt à l'emploi pour le journal de débogage avec le binaire nginx-debug (1.9.8) pouvant être exécuté à l'aide des commandes :
service nginx stop service nginx-debug start |
et définissez ensuite le niveau de débogage. La version binaire de nginx pour Windows est toujours construite avec la prise en charge du journal de débogage, donc seule la définition du niveau de débogage suffira.
Notez que la redéfinition du journal sans spécifier également le niveau de débogage désactivera le journal de débogage. Dans l'exemple ci-dessous, la redéfinition du journal au niveau du serveur désactive le journal de débogage pour ce serveur :
error_log /path/to/log debug; http { server { error_log /path/to/log; ... |
Pour éviter cela, soit la ligne redéfinissant le journal doit être commentée, soit la spécification du niveau de débogage doit également être ajoutée :
error_log /path/to/log debug; http { server { error_log /path/to/log debug; ... |
Journal de débogage pour les clients sélectionnés
Il est également possible d'activer le journal de débogage pour les adresses client sélectionnées uniquement :
error_log /path/to/log; events { debug_connection 192.168.1.1; debug_connection 192.168.10.0/24; } |
Enregistrement dans une mémoire tampon cyclique
Le journal de débogage peut être écrit dans une mémoire tampon cyclique :
error_log memory:32m debug; |
La journalisation dans la mémoire tampon au niveau du débogage n'a pas d'impact significatif sur les performances, même sous une charge élevée. Dans ce cas, le journal peut être extrait à l'aide d'un script gdb comme celui-ci :
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 |
Ou en utilisant un script lldb comme suit :
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 |