Nginx開發從入門到精通 除錯(除錯日誌)

2021-08-27 09:59:42 字數 3303 閱讀 1291

使用者在使用nginx的過程中,可能會遇到所請求的資源不正確,nginx core dump,段錯誤等異常情況,這時需要有相應的機制來進行除錯及問題定位,特別是面對大量的日誌資訊,合理的除錯處理機制對使用者來說是一件非常重要的事情。以下將著重為大家介紹除錯日誌。

【除錯日誌】

一,開啟除錯日誌:

要開啟除錯日誌,首先需要在配置nginx時開啟除錯功能,然後編譯:

./configure --with-debug ...

然後在配置檔案中設定error_log的級別為:

error_log /path/to/log debug;

nginx的windows二進位制版本總是將除錯日誌開啟的,因此只需要設定debug的日誌級別即可。

二,日誌級別分析:

在此,我們通過分析nginx原始碼了解下nginx將日誌分為幾個等級及不同日誌等級之間的相互關係:

#define ngx_log_debug_all 0x7ffffff0其中預設有效的第一級別日誌是"stderr","emerg","alert","crit","error","warn","notice","info","debug"。

而ngx_log.h內列出的其他debug第二級別日誌:"debug_core","debug_alloc","debug_mutex","debug_event","debug_http","debug_mail","debug_mysql"等則需要在配置nginx時啟動除錯日誌功能才能使用,並且使用者可以通過修改ngx_log.h及ngx_log.c原始碼來更新debug第二級別。

我們再通過ngx_log.c的部分**分析下可以如何使用這些日誌級別:

char *

ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log)

log->log_level = n;

found = 1;

break;}}

for (n = 0, d = ngx_log_debug_first; d <= ngx_log_debug_last; d <<= 1)

log->log_level |= d;

found = 1;

break;}}

...if (log->log_level == ngx_log_debug)

...}

按照以上**邏輯,我們可以得出以下結論:

1. 第一級別日誌之間是互斥的,如果配置檔案內加入如下配置項:

error_log path/logs/error.log warn;

error_log path/logs/error.log info;

那麼啟動nginx將報錯如下:

[emerg]: duplicate log level "info" in /path/conf/nginx.conf:xx

但是需要注意的是,在配置檔案不同block中是允許重新定義錯誤日誌的。但是當使用者在重新定義錯誤日誌時,如果沒有指定相應的日誌級別,那麼除錯日誌將會被遮蔽。下面的例子裡,在server層中重新定義的日誌就遮蔽了這個虛擬主機的除錯日誌:

error_log  /path/to/log  debug;

http ' /path/logs/access.log | sort | uniq -c | sort -nr | head -50

類似上面的日誌定製化設定,可以讓使用者在除錯日誌的過程中隨心所欲,如魚得水。

詳細的log_format指令和access_log指令,使用者可以訪問nginx官網的httplog模組。

四,除錯日誌的幾個注意點:

1. 勘誤:在nginx wiki裡面error log相關部分的介紹中提到

但是,我們從原始碼上看:

static char *

ngx_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)

...}

當error_log 的日誌級別選項為配置時,預設日誌級別為error,無上面提及的三個section的區別。故特在此勘誤。

2. 配置error_log off並不能關閉日誌記錄——日誌資訊會被寫入到檔名為off的檔案當中。如果要關閉日誌記錄,使用者可以做如下配置:

error_log /dev/null crit;
[alert]: could not open error log file: open() "/path/log/nginx/error.log" failed (13: permission denied)

error_log  /path/to/log;

events

1. 除錯日誌 

2. nginx error log  

3. log format 

4. 使用nginx記日誌 

**請備註**:100continue.iteye.com

Nginx開發從入門到精通

更新歷史 日期描述 2012 03 01 建立目錄大綱 2012 03 28 增加了樣章 2012 05 25 更新樣章 2012 06 08 增加第5章 2012 06 11 增加第4章 2012 06 26 增加第6章 event module 2012 06 27 更新第5章部分內容 2012...

Nginx開發從入門到精通

nginx開發從入門到精通 nginx平台初探 100 基本資料結構 99 nginx的配置系統 100 nginx的模組化體系結構 模組概述 nginx的請求處理 handler模組 100 handler模組的基本結構 handler模組的掛載 handler的編寫步驟 示例 hello han...

Nginx開發從入門到精通 nginx平台初探

眾所周知,nginx效能高,而nginx的高效能與其架構是分不開的。那麼nginx究竟是怎麼樣的呢?這一節我們先來初識一下nginx框架吧。nginx在啟動後,在unix系統中會以daemon的方式在後台執行,後台程序包含乙個master程序和多個worker程序。我們也可以手動地關掉後台模式,讓n...