本節介紹如何在NGINX中組態紀錄檔記錄錯誤和處理的請求。在本文章中將涉及以下內容 -
NGINX將遇到的不同嚴重性級別問題的資訊寫入錯誤紀錄檔。 error_log
指令將紀錄檔記錄設定為特定檔案,stderr
或syslog
,並指定要記錄的訊息的最低階別。 預設情況下,錯誤紀錄檔位於{NGING_INSTALL_PATH}/logs/error.log
(絕對路徑取決於作業系統和安裝),並記錄來自所指定的所有嚴重級別的訊息。
以下組態將錯誤訊息的最小嚴重性級別更改為從錯誤記錄到警告:
error_log logs/error.log warn;
## 或者可寫為: error_log /var/logs/nginx/error.log warn;
在這種情況下,將記錄 warn
, error crit
, alert
和 emerg
級別的訊息。
錯誤紀錄檔的預設設定全域性工作。 要覆蓋它,將error_log
指令放在 main
(頂級)組態上下文中。main
上下文中的設定始終由其他組態級別繼承。 還可以在 http
, stream
, server
和 location
級別指定error_log
指令,並覆蓋從較高階別繼承的設定。 如果發生錯誤,則該訊息只寫入一個錯誤紀錄檔,最接近發生錯誤的級別的錯誤紀錄檔。 但是,如果在同一級別指定了多個error_log
偽指令,則會將訊息寫入所有指定的紀錄檔。
注意:在開源NGINX版本1.5.2中新增了在同一組態級別指定多個
error_log
偽指令的功能。
在處理請求之後,NGINX在存取紀錄檔中寫入有關用戶端請求的資訊。 預設情況下,存取紀錄檔位於{NGING_INSTALL_PATH}logs/access.log
中,{NGING_INSTALL_PATH}
為安裝nginx的目錄,資訊以預定義的組合格式寫入紀錄檔。要覆蓋這個預設設定,請使用log_format指令更改記錄訊息的格式,以及access_log指令,以指定紀錄檔的位置及其格式。 紀錄檔格式使用變數定義。
以下範例定義擴充套件預定義組合格式的紀錄檔格式,其值指示響應gzip
的壓縮比。 然後將格式應用於啟用壓縮的虛擬伺服器。
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
gzip on;
access_log /spool/logs/nginx-access.log compression;
...
}
}
以下是一些如何讀取生成時間值的規則:
-
」(連字元)。可以通過啟用緩衝區的紀錄檔訊息和名稱包含變數的常用紀錄檔檔案的描述符快取來優化紀錄檔記錄。 要啟用緩衝,請使用access_log指令的緩衝區引數來指定緩衝區的大小。 當下一個紀錄檔訊息不適合緩衝區以及其他情況時,緩衝的訊息將被寫入紀錄檔檔案。
要啟用紀錄檔檔案描述符的快取,請使用open_log_file_cache指令。
與error_log
指令類似,在特定組態級別定義的access_log
偽指令將覆蓋以前級別的設定。 當請求的處理完成時,訊息將被寫入到當前級別上組態的紀錄檔中,或者從先前的級別繼承。 如果一個級別定義了多個存取紀錄檔,則會將訊息寫入所有的存取紀錄檔。
條件記錄允許從存取紀錄檔中排除瑣碎或不重要的紀錄檔條目。在NGINX中,條件紀錄檔記錄由access_log
偽指令的if
引數啟用。
此範例不包括使用HTTP狀態程式碼2xx
(成功)和3xx
(重定向)的請求:
map $status $loggable {
~^[23] 0;
default 1;
}
access_log /path/to/access.log combined if=$loggable;
syslog
實用程式是計算機訊息記錄的標準,並允許從單個syslog
伺服器上的不同裝置收集紀錄檔訊息。 在NGINX中,對syslog
的紀錄檔記錄使用error_log
和access_log
偽指令中的syslog:
字首進行組態。
Syslog訊息可以傳送到伺服器=可以是域名,IP地址或UNIX域的通訊端路徑。 可以使用埠指定域名或IP地址來覆蓋預設埠514
. 可以在unix:prefix
之後指定UNIX域通訊端路徑:
error_log server=unix:/var/log/nginx.sock debug;
access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;
在該範例中,NGINX錯誤紀錄檔訊息將在偵錯紀錄檔記錄級別寫入UNIX域通訊端,並將存取紀錄檔寫入具有IPv6地址和埠1234
的syslog伺服器。
facility =
引數指定正在記錄訊息的程式型別。 預設值為local7
。 其他可能的值是:auth
,authpriv
,daemon
,cron
,ftp
,lpr
,kern
,mail
,news
,syslog
,user
,uucp
,local0
… local7
。
tag =
引數將自定義標籤應用於syslog
訊息(在我們的範例中為nginx)。
severity =
引數設定存取紀錄檔的syslog訊息的嚴重性級別。 嚴重性越來越高的可能值為:debug
,info
,notice
,warn
,error(default)
,crit
,alert
和emerg
。 訊息記錄在指定的級別和更嚴重的級別。 在我們的範例中,嚴重性級別錯誤還使得可以 crit
, alert
和 emerg
級別。