### http log module[](http://tengine.taobao.org/book/chapter_03.html#http-log-module "永久鏈接至標題")
該模塊提供了對于每一個http請求進行記錄的功能,也就是我們見到的access.log。當然這個模塊對于log提供了一些配置指令,使得可以比較方便的定制access.log。
這個模塊的代碼位于src/http/modules/ngx_http_log_module.c,雖然這個模塊的代碼有接近1400行,但是主要的邏輯在于對日志本身格式啊,等細節的處理。我們在這里進行分析主要是關注,如何編寫一個log handler的問題。
由于log handler的時候,拿到的參數也是request這個東西,那么也就意味著我們如果需要,可以好好研究下這個結構,把我們需要的所有信息都記錄下來。
對于log handler,有一點特別需要注意的就是,log handler是無論如何都會被調用的,就是只要服務端接受到了一個客戶端的請求,也就是產生了一個request對象,那么這些個log handler的處理函數都會被調用的,就是在釋放request的時候被調用的(ngx_http_free_request函數)。
那么當然絕對不能忘記的就是log handler最好,也是建議被掛載在NGX_HTTP_LOG_PHASE階段。因為掛載在其他階段,有可能在某些情況下被跳過,而沒有執行到,導致你的log模塊記錄的信息不全。
還有一點要說明的是,由于nginx是允許在某個階段有多個handler模塊存在的,根據其處理結果,確定是否要調用下一個handler。但是對于掛載在NGX_HTTP_LOG_PHASE階段的handler,則根本不關注這里handler的具體處理函數的返回值,所有的都被調用。如下,位于src/http/ngx_http_request.c中的ngx_http_log_request函數。
[](http:// "點擊提交Issue,反饋你的意見...")
static void
ngx_http_log_request(ngx_http_request_t *r)
{
ngx_uint_t i, n;
ngx_http_handler_pt *log_handler;
ngx_http_core_main_conf_t *cmcf;
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
log_handler = cmcf->phases[NGX_HTTP_LOG_PHASE].handlers.elts;
n = cmcf->phases[NGX_HTTP_LOG_PHASE].handlers.nelts;
for (i = 0; i < n; i++) {
log_handler[i](r);
}
}
- 上篇:nginx模塊開發篇
- nginx平臺初探
- 初探nginx架構
- nginx基礎概念
- connection
- request
- keepalive
- pipe
- lingering_close
- 基本數據結構
- ngx_str_t
- ngx_pool_t
- ngx_array_t
- ngx_hash_t
- ngx_hash_wildcard_t
- ngx_hash_combined_t
- ngx_hash_keys_arrays_t
- ngx_chain_t
- ngx_buf_t
- ngx_list_t
- ngx_queue_t
- nginx的配置系統
- 指令參數
- 指令上下文
- nginx的模塊化體系結構
- 模塊的分類
- nginx的請求處理
- handler模塊
- handler模塊簡介
- 模塊的基本結構
- 模塊配置結構
- 模塊配置指令
- 模塊上下文結構
- 模塊的定義
- handler模塊的基本結構
- handler模塊的掛載
- handler的編寫步驟
- 示例: hello handler 模塊
- handler模塊的編譯和使用
- 更多handler模塊示例分析
- http access module
- http static module
- http log module
- 過濾模塊
- 過濾模塊簡介
- 過濾模塊的分析
- upstream模塊
- upstream模塊
- upstream模塊接口
- memcached模塊分析
- 本節回顧
- 負載均衡模塊
- 配置
- 指令
- 鉤子
- 初始化配置
- 初始化請求
- peer.get和peer.free回調函數
- 本節回顧
- 其他模塊
- core模塊
- event模塊
- 模塊開發高級篇
- 變量
- 下篇:nginx原理解析篇
- nginx架構詳解
- nginx的源碼目錄結構
- nginx的configure原理
- 模塊編譯順序
- nginx基礎設施
- 內存池
- nginx的啟動階段
- 概述
- 共有流程
- 配置解析
- nginx的請求處理階段
- 接收請求流程
- http請求格式簡介
- 請求頭讀取
- 解析請求行
- 解析請求頭
- 請求體讀取
- 讀取請求體
- 丟棄請求體
- 多階段處理請求
- 多階段執行鏈
- POST_READ階段
- SERVER_REWRITE階段
- FIND_CONFIG階段
- REWRITE階段
- POST_REWRITE階段
- PREACCESS階段
- ACCESS階段
- POST_ACCESS階段
- TRY_FILES階段
- CONTENT階段
- LOG階段
- Nginx filter
- header filter分析
- body filter分析
- ngx_http_copy_filter_module分析
- ngx_http_write_filter_module分析
- subrequest原理解析
- https請求處理解析
- 附錄A 編碼風格
- 附錄B 常用API
- 附錄C 模塊編譯,調試與測試