<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                眾所周知,線上如果出現事故我們通常都是查看日志去進行問題定位并且進行修復。使用好Nginx日志有利于我們線上進行修復異常問題。在Nginx中日志主要分為兩種:access\_log(訪問日志)和error\_log(錯誤日志)。通過查看access\_log我們可以查看用戶ip,瀏覽器信息及請求時間等信息,通過查看error\_log我們可以查看線上出錯的具體信息,可以幫助我們定位異常的原因。本篇文章主要帶領大家詳細了解Nginx如何配置日志。本文將會涉及到的日志配置指令: * access\_log * log\_format * open\_log\_file\_cache * log\_not\_found * log\_subrequest * rewrite\_log * error\_log **access\_log指令** 首先,我們可以先看看access\_log指令。access\_log命令可以配置訪問日志。我們可以先看下access\_log指令的語法結構: * access\_log path \[format \[buffer=size\] \[gzip\[=level\]\] \[flush=time\] \[if=condition\]\]; # 設置訪問日志 * access\_log off; # 關閉訪問日志 我們先來看看語法結構中的參數的含義: * path: 指定日志的存放位置 * format: 指定日志的格式,非必填,默認為預定義的combined * buffer:指定日志寫入時的緩存大小,非必填,默認64k * gzip: 日志寫入前先進行壓縮 * flush: 設置緩存的有效期 * if: 設置條件判斷,當天劍成立時才會寫入日志 * off: 值為off表示不開啟日志,值為on表示開啟日志 access\_log指令可以使用于http根節點,虛擬服務器server節點,上下文配置location以及limit\_except中。無法在其他作用域使用access\_log指令,否則Nginx會報錯。我們可以看一個簡單的配置access\_log的小例子: * access\_log /root/.pm2/logs/niyueling.log buffer=32k gzip flush=5m 這個配置指定日志存儲路徑為/root/.pm2/logs/niyueling.log,日志使用默認格式combined。日志緩存大小為32k,日志寫入前會進行gzip壓縮,緩存有效期為5分鐘。 **log\_format指令** 剛才有講過如果未指定日志格式,Nginx會使用combined日志格式為默認格式。combined日志格式默認使用格式為: * log\_format combined '![remote_addr -](https://math.jianshu.com/math?formula=remote_addr%20-)remote\_user \[![time_local] ' '"](https://math.jianshu.com/math?formula=time_local%5D%20'%20'%22)request" ![status](https://math.jianshu.com/math?formula=status)body\_bytes\_sent ' '"![http_referer" "](https://math.jianshu.com/math?formula=http_referer%22%20%22)http\_user\_agent"'; 但是如果不想使用combined日志格式,就可以使用log\_format指令來自定義格式內容。log\_format指令需要在http節點下進行配置。我們先來看下log\_format指令的語法結構: * log\_format name \[escape=default|json\] string; 我們先來看看log\_format的參數對應的用法: * name: 指定日志格式名稱,因為在access\_log指令中需要指定日志格式 * escape: 設置字符編碼方式,可以選擇default或者json * string: 要寫入日志的內容,可以有多個參數,可以使用Nginx變量。 下面貼一下log\_format指令中常用的一些變量: ![](//upload-images.jianshu.io/upload_images/17781779-87221331fb643b29.jpeg?imageMogr2/auto-orient/strip|imageView2/2/w/800/format/webp) file 我們可以接著看個自定義日志格式的**小案例**: http { log\_format main '![remote_addr -](https://math.jianshu.com/math?formula=remote_addr%20-)remote\_user \[![time_local] "](https://math.jianshu.com/math?formula=time_local%5D%20%22)request" ' '"![status"](https://math.jianshu.com/math?formula=status%22)body\_bytes\_sent "![http_referer" ' '"](https://math.jianshu.com/math?formula=http_referer%22%20'%20'%22)http\_user\_agent" "![http_x_forwarded_for" ' '"](https://math.jianshu.com/math?formula=http_x_forwarded_for%22%20'%20'%22)gzip\_ratio" ![request_time](https://math.jianshu.com/math?formula=request_time)bytes\_sent $request\_length'; server { server\_name [www.niyueling.cn](https://links.jianshu.com/go?to=http%3A%2F%2Fwww.niyueling.cn); access\_log /root/.pm2/logs/niyueling.log main; } } **open\_log\_file\_cache指令** 對于網站的訪問記錄,通常操作都是首先打開日志文件,然后寫入日志記錄,最后關閉文件。默認情況下日志文件不進行緩存的,我們可以通過open\_log\_file\_cache指令設置日志文件緩存。open\_log\_file\_cache指令可以配置在http根節點,虛擬服務器server節點以及上下文location中。我們先看下open\_log\_file\_cache指令的語法結構: * open\_log\_file\_cache max=X \[inactive=time\] \[min\_uses=N\] \[valid=time\]; * open\_log\_file\_cache off; 首先先貼下參數對應的含義: * max: 設置緩存中的最大文件描述符 * inactive: 設置存活時間 * min\_uses: 在存活時間內,日志文件最少被使用幾次后將日志文件描述符寫入緩存。 * valid: 設置檢查頻率 * off: 禁用日志緩存 可以看一個簡單配置日志緩存的小例子: * open\_log\_file\_cache max=100 inactive=30s valid=5m min\_uses=3; **log\_not\_found指令** 這個命令用于指定是否在error\_log錯誤日志中記錄不存在的錯誤,如文件不存在等。默認值為是。我們可以先看下語法結構: * log\_not\_found on | off; log\_not\_found指令可以配置在http根節點,虛擬服務器server節點以及上下文location中。設置為on表示記錄不存在的錯誤,設置為off表示不記錄不存在的錯誤。 **log\_subrequest指令** log\_subrequest指令用于指定在access\_log訪問日志中是否記錄子請求的訪問記錄。默認情況為不記錄,貼下語法結構: * log\_subrequest on | off; log\_subrequest指令可以配置在http根節點,虛擬服務器server節點以及上下文location中。設置為on表示記錄子請求訪問記錄,設置為off表示不記錄子請求訪問記錄。 **rewrite\_log指令** rewrite\_log指令由ngx\_http\_rewrite\_module模塊提供服務,用來記錄日志重寫。可以在error\_log錯誤日志中記錄notice級別的重寫日志。默認是不啟用狀態,貼下語法結構: * rewrite\_log on | off; rewrite\_log指令可以配置在http根節點,虛擬服務器server節點以及上下文location以及if條件判斷中。設置為on表示在錯誤日志中記錄notice級別的重寫日志,設置為off表示在錯誤日志中不記錄notice級別的重寫日志。 **error\_log指令** error\_log指令顧名思義,就是用來指定錯誤日志的,一般來說線上出現bug都是通過error\_log日志來定位問題所在而加以解決的。error\_log指令可以記錄服務器和請求處理過程中的錯誤信息。我們先看下error\_log指令的語法結構: * error\_log file \[level\]; 參數含義其實很容易可以理解: * file: error\_log 存放路徑 * level: 日志級別,只有日志級別高于指定級別才會記錄到error\_log中 * error\_log指令可以配置在http節點,main節點,虛擬服務器server節點以及上下文location中。 **日志切割** Nginx記錄日志默認情況下是訪問日志全部寫入access\_log中,錯誤日志全部寫入error\_log中。這樣會導致日志文件原來越大,不利于查看日志分析問題異常,所以我們可以將日志以日期為單位進行切割。首先需要寫一個腳本實現Nginx按天切割: > **日志保存位置** * base\_path='/root/.pm2/logs/niyueling.log' > **獲取當前年信息和月信息** * log\_path=$(date -d yesterday +"%Y%m") > **獲取昨天的日信息** * day=$(date -d yesterday +"%d") > **按年月創建文件夾** * mkdir -p ![base_path/](https://math.jianshu.com/math?formula=base_path%2F)log\_path > **備份昨天的日志到當月的文件夾** * mv ![base_path/access.log](https://math.jianshu.com/math?formula=base_path%2Faccess.log)base\_path/![log_path/access_](https://math.jianshu.com/math?formula=log_path%2Faccess_)day.log > **輸出備份日志文件名** * echo ![base_path/](https://math.jianshu.com/math?formula=base_path%2F)log\_path/access\_$day.log > **通過Nginx信號量控制重讀日志** * kill -USR1 `cat /opt/nginx/logs/nginx.pid` **然后給腳本添加可執行權限,最后添加Linux定時任務:** * crontab -e **每天凌晨兩點半進行日志分割** * 30 02 0 \* \* \* /root/.pm2/logs/splitLog.sh \*\* 重啟Linux定時任務\*\* * crond restart 通過上面的講解差不多可以知道Nginx對于日志是如何進行配置的,實際上就是通過log\_format配置日志格式,如果log\_format中使用了Nginx變量,則可以通過open\_log\_file\_cache指令來設置緩存提高性能。然后通過access\_log進行設置訪問日志,通過error\_log指令設置錯誤日志。最后實現定時任務定時切割每天的日志,有利于我們后期維護。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看