參考文章:https://juejin.im/post/5aa09bb3f265da238f121b6c
本篇文章主要介紹一下 nginx 服務器兩種日志查看:access_log、error_log
access_log:指的是訪問日志,我們通過訪問日志可以獲取用戶的 IP、請求處理的時間、瀏覽器信息等
error_log:錯誤日志記錄了訪問出錯的信息,可以用於定位錯誤的原因
設置 access_log
訪問日志主要用於記錄客戶端的請求。客戶端向 nginx 服務器發起的每一次請求都會被記錄到 access_log 中。
包含請求 IP、時間、訪問 url等等,當然訪問日志中具體記錄哪些日志信息我們可以通過 log_format 設置
查看日志存放地址
find / -name nginx.conf
根據查詢出來地址,進入 nginx.conf 文件查找 access_log 和 error_log 文件的路徑
設置 access_log 語法:
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; # 設置訪問日志 access_log off; # 關閉訪問日志
path 表示指定日志存放位置 format 表示日志格式即日志中記錄的內容 buffer 用於指定日志寫入時的緩存大小,默認 64k gzip 日志寫入前先壓縮。壓縮率可以指定,從1到9數值越大壓縮比越高,同時壓縮的速度也越慢,默認1 flush 設置緩存的時間,如果超過flush指定的時間,緩存中的內容將被清空 if 判斷條件,如果指定的條件計算為0或空字符串,那么該請求不會被寫入日志
設置 buffer 的目的,是為了避免高頻對磁盤進行讀寫操作,即暫時先不將日志寫入磁盤,而是存入內存中,等達到了設置緩存大小之后再一次性
寫入,注意 flush 指令是和 buffer 一起使用的,即指定 buffer=size 之后,如果超過 flush 指令設定的時間仍然未達到緩存區大小,則也會被寫入到
磁盤,沒有 buffer 而只有 flush 則會報錯
基本用法
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 分鍾
查看 access 訪問日志(日志摘抄來自網上,主要用於說明問題)
訪問日志分析
摘出來一段部分分析:
100.109.195.91 - - [17/Feb/2017:00:08:11 +0800] "GET /data/upload/shop/common/loading.gif HTTP/1.0" 200 134 "http://www.mall121.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0; Windows NT 6.1; SLCC2 2.5.5231; .NET CLR 2.0.50727; .NET CLR 4.1.23457; .NET CLR 4.0.23457; Media Center PC 6.0; MS-WK 8)" "140.205.201.12" 100.109.195.78 - - [17/Feb/2017:00:08:11 +0800] "GET /shop/templates/default/images/u-safe.png HTTP/1.0" 200 3675 "http://www.mall121.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0; Windows NT 6.1; SLCC2 2.5.5231; .NET CLR 2.0.50727; .NET CLR 4.1.23457; .NET CLR 4.0.23457; Media Center PC 6.0; MS-WK 8)" "140.205.201.12" 100.109.195.26 - - [17/Feb/2017:00:08:11 +0800] "GET /data/upload/shop/adv/05240495346955824.jpg HTTP/1.0" 404 564 "http://www.mall121.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0; Windows NT 6.1; SLCC2 2.5.5231; .NET CLR 2.0.50727; .NET CLR 4.1.23457; .NET CLR 4.0.23457; Media Center PC 6.0; MS-WK 8)" "140.205.201.12"
1.100.109.195.91 $remote_addr 客戶端(用戶) IP地址 2.[17/Feb/2017:00:08:11 +0800] $local_time 訪問時間 3."GET /data/upload/shop/common/loading.gif HTTP/1.0" $request GET請求的 url 地址 4.200 $status 請求狀態 5.134 $body_bytes_sent 請求頁面大小,默認 B 6."http://www.mall121.com/" $refer 頁面來源即從哪個頁面跳轉過來,專業叫refer 7."Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0; Windows NT 6.1; SLCC2 2.5.5231; .NET CLR 2.0.50727; .NET CLR 4.1.23457; .NET CLR 4.0.23457; Media Center PC 6.0; MS-WK 8)" $http_user_agent 用戶瀏覽器信息,包含版本、類型等 8."140.205.201.12" $http_x_foewarded_for php中可以通過你此項獲取用戶真實ip地址
我們也可以根據自己需要日志信息在 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