1. 程式人生 > >Nginx如何對日誌文件進行配置?

Nginx如何對日誌文件進行配置?

bin request 絕對路徑 今天 referer 重要 就會 off 最重要的

在我們日常工作開發中,對調試bug最重要的手段就是查看日誌和斷點調試了。
今天我們來說日誌文件,Nginx的日誌文件一般保存的是訪問日誌和錯誤日誌。

1. 用來log_format指令設置日誌格式

  log_format指令語法:log_format name format [format ...]
  Nginx默認的combined格式如下:
  log_format combined '$remote_addr - $remote_user [$time_local] '
                                      '"$request" $status $body_bytes_sent '
                                      '"$http_referer" "$http_user_agent"';
  其中$remote_addr        和$http_x_forward_for用於記錄IP地址
        $remote_user        用於記錄遠程客戶端用戶名稱
        $time_local         用於記錄訪問時間和時區
        $request            用於記錄請求URL與HTTP協議
        $status             用於記錄請求狀態
        $body_bytes_sent    用於記錄發送給客戶端的文件主體內容大小
        $http_referer       用於記錄是從哪個頁面鏈接訪問過來的
        $http_user_agent    用於記錄客戶端瀏覽器的相關內容

2. 用access_log指令指定訪問日誌文件存放路徑

    access_log指令語法:access_log path [format [buffer=size | off]]
    format即第一點中log_format的name,如何設置了format,那麽日誌文件就會按設置的日誌格式生成日誌文件.
    butter=size表示內存緩沖區的大小,例如可以設置buffer=32k

3. 用error_log指令指定錯誤日誌文件存放路徑

    error_log    <FILE>    <LEVEL>;
    <FILE>:可以指定任意存放日誌的目錄
    <LEVEL>:錯誤日誌級別,常見的錯誤日誌級別有[debug | info | notice | warn | error | crit | alert | emerg],級別越高記錄的信息越少。
    生產場景一般是 warn | error | crit 這三個級別之一

4. Nginx日誌文件的切割

    日積月累下,日誌文件會越來越大,日誌文件太大嚴重影響服務器效率,須要定時對日誌文件進行切割。
    切割的方式有按月切割、按天切割、按小時切割,一般都是按天切割。
    那麽如何進行切割呢?
    步驟如下:
    1. 創建日誌文件存放路徑
    2. 將日誌文件以當天時間為名字進行重命名
    3. 發送kill -USR1信號給Nginx的主進程號,讓Nginx重新生成一個新的日誌文件
    
    步驟知道了,那具體的代碼呢?
    把如下代碼保存為一個sh文件,然後利用crontab讓這個sh文件每天在00:00定時執行這個腳本
    註意最後一步要換成自己環境下nginx.pid的絕對路徑
    
    #!/bin/bash
    logs_path="/data1/logs/"
    mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1 `cat /var/nginx/nginx.pid`
    

Nginx如何對日誌文件進行配置?