nginx如何自定義日誌記錄格式?

2021-09-28 20:53:43 字數 2579 閱讀 3634

nginx日誌主要分為兩種:access_log(訪問日誌)和error_log(錯誤日誌)。通過訪問日誌我們可以得到使用者的ip位址、瀏覽器的資訊,請求的處理時間等。錯誤日誌記錄了訪問出錯的資訊,可以幫助我們找到錯誤的原因。

訪問日誌主要記錄客戶端的請求資訊,客戶端向nginx伺服器發起的每一次請求都記錄在這裡。

客戶端ip,瀏覽器資訊,referer,請求處理時間,請求url等都可以在訪問日誌中得到。當然具體要記錄哪些資訊,你可以通過log_format指令自定義。

以上是access_log指令的基本語法和引數的含義。下面我們看一幾個例子加深一下理解。

access_log /var/logs/nginx-access.log
該例子指定日誌的寫入路徑為/var/logs/nginx-access.log,日誌格式使用預設的combined。

access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m
該例子指定日誌的寫入路徑為/var/logs/nginx-access.log,日誌格式使用預設的combined,指定日誌的快取大小為32k,日誌寫入前啟用gzip進行壓縮,壓縮比使用預設值1,快取資料有效時間為1分鐘。

nginx預定義了名為combined日誌格式,如果沒有明確指定日誌格式預設使用該格式:

下面是常用的一些變數含義:

如果不想使用nginx預定義的格式,可以通過log_format指令來自定義。

下面演示一下自定義日誌格式的使用:

我們使用log_format指令定義了乙個main的格式,並在access_log指令中引用了它。假如客戶端有發起請求,我們看一下我擷取的乙個請求的日誌記錄:

我們看到日誌記錄中$remote_user、$http_referer、$http_x_forwarded_for都是乙個-,這是因為這幾個變數為空。

錯誤日誌在nginx中是通過error_log指令實現的。該指令記錄伺服器和請求處理過程中的錯誤資訊。

配置錯誤日誌檔案的路徑和日誌級別。

error_log file [level];

default:    

error_log logs/error.log error;

第乙個引數指定日誌的寫入位置。

第二個引數指定日誌的級別。level可以是debug, info, notice, warn, error, crit, alert,emerg中的任意值。可以看到其取值範圍是按緊急程度從低到高排列的。只有日誌的錯誤級別等於或高於level指定的值才會寫入錯誤日誌中。預設值是error。

每一條日誌記錄的寫入順序都是先開啟檔案,寫入記錄,然後關閉日誌檔案。

如果日誌檔案路徑中使用到了變數,如access_log /var/logs/$host/nginx-access.log,為了提高效能,可以使用open_log_file_cache指令設定日誌檔案描述符的快取。

open_log_file_cache max=n [inactive=time] [min_uses=n] [valid=time];

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

例子中,設定快取最多快取1000個日誌檔案描述符,20s內如果快取中的日誌檔案描述符至少被被訪問2次,才不會被關閉,每隔1分鐘檢查快取中的檔案描述符的檔名是否還存在。

nginx中通過access_log和error_log指令配置訪問日誌和錯誤日誌,通過log_format我們可以自定義日誌格式。如果日誌檔案路徑中使用了變數,我們可以通過open_log_file_cache來設定快取,提公升效能。

nginx自定義日誌格式

nginx日誌格式的設計 根據開發要求我們要在nginx的日誌中列印一些特殊資訊,所以必須自定義一些日誌,設定user id的預設值 set user id 0 設定user kind的預設值 set user kind 設定uuid的預設值 nginx中location模組的詳細引數介紹 ngin...

自定義日誌記錄檔案

舉例 郵件傳送錯誤記錄日誌 日誌記錄介面 ilogservice.cs public inte ce ilogservice 日誌記錄介面 實現 filelogservice.cs public class filelogservice ilogservice finally catch endre...

Nginx 如何自定義變數?

之前的兩篇文章 nginx 變數介紹以及利用 nginx 變數做防盜煉 講的是 nginx 有哪些變數以及乙個常見的應用。那麼如此靈活的 nginx 怎麼能不支援自定義變數呢,今天的文章就來說一下自定義變數的幾個模組以及 nginx 的 keepalive 特性。模組 ngx http map mo...