nginx日誌

一.  nginx.conf中 http 加入如下配置linux

access_log on;
        log_format main '$remote_addr - [$time_local] '
                        '$upstream_addr $request_time $upstream_response_time '
                        '$http_host $request'
                        '"$status" $body_bytes_sent "$http_user_agent"';
        access_log  /data/nginx_log/access.log main;

$remote_addr, $http_x_forwarded_for 記錄客戶端IP地址nginx

$remote_user 記錄客戶端用戶名稱
$request 記錄請求的URL和HTTP協議
$status 記錄請求狀態
$body_bytes_sent 發送給客戶端的字節數,不包括響應頭的大小; 該變量與Apache模塊mod_log_config裏的「%B」參數兼容。
$bytes_sent 發送給客戶端的總字節數。
$connection 鏈接的序列號。
$connection_requests 當前經過一個鏈接得到的請求數量。
$msec 日誌寫入時間。單位爲秒,精度是毫秒。
$pipe 若是請求是經過HTTP流水線(pipelined)發送,pipe值爲「p」,不然爲「.」。
$http_referer 記錄從哪一個頁面連接訪問過來的
$http_user_agent 記錄客戶端瀏覽器相關信息
$request_length 請求的長度(包括請求行,請求頭和請求正文)。
$request_time 請求處理時間,單位爲秒,精度毫秒; 從讀入客戶端的第一個字節開始,直到把最後一個字符發送給客戶端後進行日誌寫入爲止。
$time_iso8601 ISO8601標準格式下的本地時間。
$time_local 通用日誌格式下的本地時間。

 二.shell

nginx的日誌文件沒有rotate功能。編寫天天生成一個日誌,咱們能夠寫一個nginx日誌切割腳原本自動切割日誌文件。瀏覽器

第一步就是重命名日誌文件,不用擔憂重命名後nginx找不到日誌文件而丟失日誌。在你未從新打開原名字的日誌文件前,nginx仍是會向你重命名的文件寫日誌,Linux是靠文件描述符而不是文件名定位文件。bash

第二步向nginx主進程發送USR1信號。nginx主進程接到信號後會從配置文件中讀取日誌文件名稱,從新打開日誌文件(以配置文件中的日誌名稱命名),並以工做進程的用戶做爲日誌文件的全部者。從新打開日誌文件後,nginx主進程會關閉重名的日誌文件並通知工做進程使用新打開的日誌文件。工做進程馬上打開新的日誌文件並關閉重名名的日誌文件。而後你就能夠處理舊的日誌文件了。[或者重啓nginx服務]。spa

nginx日誌按每分鐘自動切割腳本以下:.net

新建shell腳本:vi/usr/local/software/nginx/nginx_log.sh日誌

 #!/bin/bash
        #設置日誌文件存放目錄
        LOG_HOME="/usr/local/software/nginx/logs/"

        #備分文件名稱
        LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".abc.access.log

        #重命名日誌文件
        mv ${LOG_HOME}/abc.access.log ${LOG_HOME}/${LOG_PATH_BAK}.log

        #向nginx主進程發信號從新打開日誌 
        kill -USR1 `cat /usr/local/software/nginx/logs/nginx.pid`天天凌晨執行以上腳本
相關文章
相關標籤/搜索