nginx預設的日誌是統一寫到 安裝目錄的log下的 ,訪問日誌是 access.log,錯誤記錄檔是error.log
而且並沒有提供一個可配置的地方,對於生產環境,日誌都集中在一塊兒,沒過幾天記錄檔就可以大到幾個G,只能是使用作業系統的定時任務,自己寫指令碼定時執行,將log日誌進行切割。
參考網上前輩的文章,自己寫了一個指令碼出來。代碼如下:
#定義日誌的源路徑,即nginx的預設log路徑source_log_path=/usr/local/nginx/logs#定義儲存後的路徑位置dest_log_path=/opt/logs/nginx#定義log檔案的名稱,以每天為單位,定義日誌的首碼為昨天的日期,因為定時任務擬在淩晨零點後執行。yesterday=$(date -d"yesterday" +%Y%m%d) #echo ${yesterday}#rm -rf ${dest_log_path}/*#指定移動mv ${source_log_path}/access.log ${dest_log_path}/nginx_access_${yesterday}.logmv ${source_log_path}/error.log ${dest_log_path}/nginx_error_${yesterday}.log #移動後,重新向nginx的主進程發送資訊,令nginx的主進程將日誌重新開啟。否則日誌將會繼續寫到mv後的路徑中kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`cd${dest_log_path}#進入日誌的路徑,查詢前天前的日誌,然後將其刪掉。find . -mtime +7 -name "*20[1-9][3-9]*" |xargs rm -rfexit0
最後,將該代碼儲存到一個sh檔案,並將該檔案加入到系統的定時任務中。
#定時任務的檔案在 /etc/crontab 下,vi此檔案,設定為每天 零點 執行。0 0 * * * root /bin/sh /opt/sampleEnvironment/commands/nginxlogperday.sh
代碼其實並不複雜。但是在寫的時候還是花費了太多時間,
遇到的問題是:在定義完變數後,比如source_log_path 執行該指令碼,即會報錯 command not found
到最後才發現, 我在定義 source_log_path 的時候 是這樣寫的 :
source_log_path = /usr/local/nginx/log
在等號兩邊均敲了一個空格,這樣就導致了上面的錯誤。在定義日期變數的時候,也是如此。
平時使用vi命令的時候,僅僅就停留在入門的階段,幾乎不會幾個命令。最多就知道“dd” 。
這次需要編輯的時候,才發現多麼費勁。這次使用的比較多的命令是:
刪除一行: dd
移動到行末尾: $
移動到行末尾並編輯: A (或者shift + a)
移動到文檔的末尾: shift + g
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了nginx 按天分割日誌,包括了nginx方面的內容,希望對PHP教程有興趣的朋友有所協助。