本節(jié)介紹如何在NGINX中配置日志記錄錯誤和處理的請求。在本文章中將涉及以下內(nèi)容 -
NGINX將遇到的不同嚴重性級別問題的信息寫入錯誤日志。 error_log
指令將日志記錄設置為特定文件,stderr
或syslog
,并指定要記錄的消息的最低級別。 默認情況下,錯誤日志位于{NGING_INSTALL_PATH}/logs/error.log
(絕對路徑取決于操作系統(tǒng)和安裝),并記錄來自所指定的所有嚴重級別的消息。
以下配置將錯誤消息的最小嚴重性級別更改為從錯誤記錄到警告:
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
指令,并覆蓋從較高級別繼承的設置。 如果發(fā)生錯誤,則該消息只寫入一個錯誤日志,最接近發(fā)生錯誤的級別的錯誤日志。 但是,如果在同一級別指定了多個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;
...
}
}
以下是一些如何讀取生成時間值的規(guī)則:
-
”(連字符)。可以通過啟用緩沖區(qū)的日志消息和名稱包含變量的常用日志文件的描述符緩存來優(yōu)化日志記錄。 要啟用緩沖,請使用access_log指令的緩沖區(qū)參數(shù)來指定緩沖區(qū)的大小。 當下一個日志消息不適合緩沖區(qū)以及其他情況時,緩沖的消息將被寫入日志文件。
要啟用日志文件描述符的緩存,請使用open_log_file_cache指令。
與error_log
指令類似,在特定配置級別定義的access_log
偽指令將覆蓋以前級別的設置。 當請求的處理完成時,消息將被寫入到當前級別上配置的日志中,或者從先前的級別繼承。 如果一個級別定義了多個訪問日志,則會將消息寫入所有的訪問日志。
條件記錄允許從訪問日志中排除瑣碎或不重要的日志條目。在NGINX中,條件日志記錄由access_log
偽指令的if
參數(shù)啟用。
此示例不包括使用HTTP狀態(tài)代碼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消息可以發(fā)送到服務器=可以是域名,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錯誤日志消息將在調(diào)試日志記錄級別寫入UNIX域套接字,并將訪問日志寫入具有IPv6地址和端口1234
的syslog服務器。
facility =
參數(shù)指定正在記錄消息的程序類型。 默認值為local7
。 其他可能的值是:auth
,authpriv
,daemon
,cron
,ftp
,lpr
,kern
,mail
,news
,syslog
,user
,uucp
,local0
… local7
。
tag =
參數(shù)將自定義標簽應用于syslog
消息(在我們的示例中為nginx)。
severity =
參數(shù)設置訪問日志的syslog消息的嚴重性級別。 嚴重性越來越高的可能值為:debug
,info
,notice
,warn
,error(default)
,crit
,alert
和emerg
。 消息記錄在指定的級別和更嚴重的級別。 在我們的示例中,嚴重性級別錯誤還使得可以 crit
, alert
和 emerg
級別。