ngx_http_log_module 模組
範例設定 指令 access_log log_format open_log_file_cache |
ngx_http_log_module
模組會以指定的格式寫入請求日誌。
請求會在處理結束的位置的內容中記錄。如果請求處理期間發生內部重定向,則可能與原始位置不同。
範例設定
log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; access_log /spool/logs/nginx-access.log compression buffer=32k;
指令
語法 |
access_log access_log |
---|---|
預設 |
access_log logs/access.log combined; |
上下文 |
http , server , location , if in location , limit_except |
設定緩衝日誌寫入的路徑、格式和設定。可以在相同的設定層級上指定多個日誌。可以透過在第一個參數中指定 “syslog:
” 前綴來設定記錄到 syslog。特殊值 off
會取消目前層級的所有 access_log
指令。如果未指定格式,則會使用預先定義的 “combined
” 格式。
如果使用 buffer
或 gzip
(1.3.10, 1.2.7) 參數,則會緩衝寫入日誌。
緩衝區大小不得超過原子寫入磁碟檔案的大小。對於 FreeBSD,此大小不受限制。
啟用緩衝時,資料將會寫入檔案
- 如果下一行日誌不適合緩衝區;
- 如果緩衝資料的時間超過
flush
參數指定的時間 (1.3.10, 1.2.7); - 當工作進程 重新開啟 日誌檔案或關閉時。
如果使用 gzip
參數,則緩衝資料會在寫入檔案之前壓縮。壓縮等級可以在 1 (最快,較少壓縮) 和 9 (最慢,最佳壓縮) 之間設定。預設情況下,緩衝區大小等於 64K 位元組,而壓縮等級設定為 1。由於資料是以原子區塊壓縮的,因此可以隨時透過 “zcat
” 解壓縮或讀取日誌檔案。
範例
access_log /path/to/log.gz combined gzip flush=5m;
為了使 gzip 壓縮起作用,nginx 必須使用 zlib 程式庫建置。
檔案路徑可以包含變數 (0.7.6 以上),但此類日誌有一些限制
- 使用工作進程憑證的 使用者 應具有在具有此類日誌的目錄中建立檔案的權限;
- 緩衝寫入不起作用;
- 檔案會在每次日誌寫入時開啟和關閉。然而,由於常用檔案的描述符可以儲存在 快取 中,因此在 open_log_file_cache 指令的
valid
參數指定的時間內,寫入舊檔案可以繼續 - 在每次日誌寫入期間,都會檢查請求的 根目錄 是否存在,如果不存在,則不會建立日誌。因此,最好在相同的設定層級上指定 root 和
access_log
server { root /spool/vhost/data/$host; access_log /spool/vhost/logs/$host; ...
if
參數 (1.7.0) 啟用條件記錄。如果 condition
的值評估為 “0” 或空字串,則不會記錄請求。在以下範例中,回應代碼為 2xx 和 3xx 的請求將不會被記錄
map $status $loggable { ~^[23] 0; default 1; } access_log /path/to/access.log combined if=$loggable;
語法 |
log_format |
---|---|
預設 |
log_format combined "..."; |
上下文 |
http |
指定日誌格式。
escape
參數 (1.11.8) 允許在變數中設定 json
或 default
字元逸出,預設情況下,使用 default
逸出。none
值 (1.13.10) 會停用逸出。
對於 default
逸出,字元 “"
”、“\
” 和其他值小於 32 (0.7.0) 或大於 126 (1.1.6) 的字元會逸出為 “\xXX
”。如果找不到變數值,則會記錄連字號 (“-
”)。
對於 json
逸出,所有 JSON 字串中不允許的字元都會逸出:字元 “"
” 和 “\
” 會逸出為 “\"
” 和 “\\
”,值小於 32 的字元會逸出為 “\n
”、“\r
”、“\t
”、“\b
”、“\f
” 或 “\u00XX
”。
日誌格式可以包含通用變數和僅在寫入日誌時存在的變數
$bytes_sent
- 傳送到用戶端的位元組數
$connection
- 連線序號
$connection_requests
- 透過連線發出的目前請求數 (1.1.18)
$msec
- 在寫入日誌時以毫秒解析度的秒數
$pipe
- 如果請求是管線化,則為 “
p
”,否則為 “.
” $request_length
- 請求長度 (包括請求行、標頭和請求主體)
$request_time
- 以毫秒解析度的秒為單位的請求處理時間;從用戶端讀取第一個位元組到將最後一個位元組傳送到用戶端後的日誌寫入之間經過的時間
$status
- 回應狀態
$time_iso8601
- ISO 8601 標準格式的當地時間
$time_local
- 通用日誌格式的當地時間
在現代 nginx 版本中,變數 $status (1.3.2, 1.2.2)、$bytes_sent (1.3.8, 1.2.5)、$connection (1.3.8, 1.2.5)、$connection_requests (1.3.8, 1.2.5)、$msec (1.3.9, 1.2.6)、$request_time (1.3.9, 1.2.6)、$pipe (1.3.12, 1.2.7)、$request_length (1.3.12, 1.2.7)、$time_iso8601 (1.3.12, 1.2.7) 和 $time_local (1.3.12, 1.2.7) 也可用作通用變數。
傳送到用戶端的標頭行具有前綴 “sent_http_
”,例如,$sent_http_content_range
。
設定始終包含預先定義的 “combined
” 格式
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
語法 |
open_log_file_cache open_log_file_cache |
---|---|
預設 |
open_log_file_cache off; |
上下文 |
http , server , location |
定義一個快取,用於儲存名稱包含變數的常用日誌的檔案描述符。該指令具有以下參數
max
- 設定快取中的描述符最大數量;如果快取已滿,則會關閉最近最少使用的 (LRU) 描述符
inactive
- 設定如果在該時間內沒有存取,則快取描述符關閉的時間;預設情況下,為 10 秒
min_uses
- 設定在
inactive
參數定義的時間內,檔案的最少使用次數,以讓描述符保持在快取中開啟;預設情況下,為 1 valid
- 設定應檢查檔案是否仍然存在且具有相同名稱的時間;預設情況下,為 60 秒
off
- 停用快取
使用範例
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;