Nginx記錄遇到不一樣級別的問題信息到錯誤日誌。Error_log指令設置日誌記錄到特定文件,stderr,或syslog並記錄最小消息級別到日誌。默認,錯誤日誌位於logs/error.log(絕對路徑依賴於操做系統和安裝)。nginx
配置將錯誤消息的最小嚴重級別從error改變爲warn:緩存
error_log logs/error.log warn;服務器
在這種狀況下,warn、error、crit、alert、emerg級別被記錄。工具
錯誤日誌默認設置做用在全局範圍。爲了覆蓋它,放置error_log指令在main配置上下文中。設置在main上下文老是被其它配置級別繼承。error_log指令也能指定在http、stream、server和location級別並覆蓋繼承自高級別的設置。在錯誤的狀況下,消息只寫一個錯誤日誌,一個最接近發生錯誤的級別。然而,若是幾個error_log指令指定在相同級別,消息寫入全部指定日誌。優化
注意:可以指定多個error_log指令在相同配置級別。網站
客戶端請求處理後,Nginx記錄客戶端請求到訪問日誌。默認,訪問日誌位於logs/access.log,以預約義的格式寫入日誌。爲了覆蓋默認設置,使用log_format指令改變記錄消息的格式,access_log指令指定日誌的位置和格式。日誌格式使用變量定義。spa
下面例子定義日誌格式繼承預約義組合格式,使用值表示響應的gzip壓縮率。格式應用到啓用壓縮的虛擬服務器。操作系統
http {debug
log_format compression '$remote_addr - $remote_user [$time_local] 'unix
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
gzip on;
access_log /spool/logs/nginx-access.log compression;
...
}
}
日誌格式的其它例子,跟蹤Nginx和upstream服務器之間不一樣的時間值,可能有助於診斷問題,若是你的網站體驗放緩。你能使用如下變量記錄時間值:
$upstream_connect_time——與upstream創建鏈接花費的時間
$upstream_header_time——創建鏈接和從upstream服務器接收響應頭的第一個字節花費的時間
$upstream_response_time——創建鏈接和從upstream服務器接收響應頭的最後一個字節花費的時間
$request_time——統計處理請求花費的時間
全部時間值以秒和毫秒爲單位。
http {
log_format upstream_time '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"'
'rt=$request_time uct="$upstream_connect_time" uht="$upstream_header_time" urt="$upstream_response_time"';
server {
access_log /spool/logs/nginx-access.log upstream_time;
...
}
}
時間值規則以下所示:
啓用日誌消息緩存和頻繁使用包含變量的日誌文件的描述符緩存優化日誌。使用access_log指令的buffer參數啓用緩存並指定緩存大小。當下一條日誌消息不符合緩存以及其它狀況,緩存消息寫入日誌文件。
爲了啓用日誌文件描述符的緩存,使用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指令。
系統日誌消息能發送到指定域名、IP地址或UNIX域名套接字路徑的服務器上。域名或IP地址使用端口覆蓋默認端口。UNIX域名套接字路徑要指定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端口的系統日誌服務器。
facility=參數指定記錄消息的程序類型。默認值是local7.其它可能值是:auth、authpriv、daemon、cron、ftp、lpr、kern、mail、news、syslog、user、uucp、local0...local7。
tag=參數應用自定義標籤記錄系統消息。
serverity=參數設置訪問日誌的系統日誌消息嚴重級別。可能值順序:debug、info、notice、error(默認)、crit、alert和emerg。消息記錄指定級別和全部更嚴重級別。