<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                日志記錄和寫入由`\think\Log`類完成,通常我們使用`think\facade\Log`類進行靜態調用。 由于日志記錄了所有的運行錯誤,因此養成經常查看日志文件的習慣,可以避免和及早發現很多的錯誤隱患。 >[info] 5.1的日志遵循`PSR-3`規范 [TOC=2,3] ## 日志配置 日志的配置文件是配置文件目錄下的`log.php`文件,如果需要針對不同的模塊設置不同的日志類型,則需要在模塊配置目錄下的`log.php`中配置,系統在進行日志寫入之前會讀取該配置文件進行初始化。 日志配置參數根據不同的日志類型有所區別,內置的日志類型包括:`file`、`socket`,日志類型使用`type`參數配置即可。 日志的全局配置參數包含(無論使用什么日志類型都支持): 參數|描述 ---|--- type|日志類型(或者驅動類名稱) level|允許記錄的日志級別 allow_key|允許日志寫入的授權key close|是否關閉日志寫入(`V5.1.8+`) >[danger] 默認的日志類型是`File`方式,可以通過驅動的方式來擴展支持更多的記錄方式。 文件類型日志的話,還支持下列配置參數: 參數|描述 ---|--- path|日志存儲路徑 file_size|日志文件大小限制(超出會生成多個文件) apart_level|獨立記錄的日志級別 time_format|時間記錄格式 single|是否單一文件日志 max_files|最大日志文件數(超過自動清理 `V5.1.6+`) >[danger] 為了避免同一個目錄下面的日志文件過多的性能問題,日志文件會自動生成日期子目錄。 下面是一個`log.php`配置示例: ~~~ return [ // 日志記錄方式,支持 file socket 或者自定義驅動類 'type' => 'File', //日志保存目錄 'path' => '../logs/', //單個日志文件的大小限制,超過后會自動記錄到第二個文件 'file_size' =>2097152, //日志的時間格式,默認是` c ` 'time_format' =>'c' ], ~~~ >[danger] 系統并未提供關閉日志的方法,但有兩種方式可以關閉日志的寫入,第一種方式是設置日志類型為test,即不寫入任何日志。第二種方式是設置日志記錄級別,只記錄需要的日志。`V5.1.8+`版本開始,支持配置`close`參數關閉全局日志寫入(但不影響`write`方法寫入日志)。 ## 日志寫入 ### 手動記錄 一般情況下,系統的日志記錄是自動的,無需手動記錄,但是某些時候也需要手動記錄日志信息,Log類提供了3個方法用于記錄日志。 | 方法 | 描述 | | --- | --- | | record() | 記錄日志信息到內存 | | save() | 把保存在內存中的日志信息(用指定的記錄方式)寫入,并清空內存中的日志 | | write() | 實時寫入一條日志信息,會觸發save操作 | >[danger] `V5.1.15+`版本開始,`write`方法不會觸發`save`操作 由于系統在請求結束后會自動調用`Log::save`方法,所以通常,你只需要調用`Log::record`記錄日志信息即可。 record方法用法如下: ~~~ Log::record('測試日志信息'); ~~~ 默認記錄的日志級別是`info`,也可以指定日志級別: ~~~ Log::record('測試日志信息,這是警告級別','notice'); ~~~ 采用`record`方法記錄的日志信息不是實時保存的,如果需要實時記錄的話,可以采用`write`方法,例如: ~~~ Log::write('測試日志信息,這是警告級別,并且實時寫入','notice'); ~~~ >[danger] 為避免內存溢出,在命令行下面執行的話日志信息會實時寫入。 `V5.1.6+`版本開始,可以使用`close`方法臨時關閉當前請求的日志寫入。 ~~~ // 關閉當前日志寫入 Log::close(); ~~~ 不過,關閉日志并不會影響`write`方法的寫入。 `V5.1.18+`版本開始,取消了原來的Test驅動,改為設置close參數關閉全局日志寫入。 ### 日志級別 ThinkPHP對系統的日志按照級別來分類記錄,按照`PSR-3`日志規范,日志的級別從低到高依次為: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`,ThinkPHP額外增加了一個`sql`日志級別僅用于記錄`SQL`日志(并且僅當開啟數據庫調試模式有效)。 >[danger] 系統發生異常后記錄的日志級別是`error` 系統提供了不同日志級別的快速記錄方法,例如: ~~~ Log::error('錯誤信息'); Log::info('日志信息'); // 和下面的用法等效 Log::record('錯誤信息','error'); Log::record('日志信息','info'); ~~~ 還封裝了一個助手函數用于日志記錄,例如: ~~~ trace('錯誤信息','error'); trace('日志信息','info'); ~~~ 事實上,你可以增加自定義的日志類型,例如: ~~~ Log::record('自定義錯誤信息','diy'); trace('自定義錯誤信息','diy'); ~~~ 也支持指定級別日志的輸入,需要配置信息: ~~~ return [ 'type' => 'File', // 日志記錄級別,使用數組表示 'level' => ['error','alert'], ], ~~~ 上面的配置表示只記錄`error`和`alert`級別的日志信息。 >[danger] 默認情況下是不會記錄HTTP異常日志(避免受一些攻擊的影響寫入大量日志),除非你接管了系統的異常處理,重寫了report方法。 ### 上下文信息 日志可以傳入上下文信息(數組),并且被替換到日志內容中,例如: ~~~ Log::info('日志信息{user}', ['user'=>'流年']); ~~~ 實際寫入日志的時候,`{user}`會被替換為流年。 ### 獨立日志 為了便于分析,`File`類型的日志還支持設置某些級別的日志信息單獨文件記錄,例如: ~~~ return [ 'type' => 'file', // error和sql日志單獨記錄 'apart_level' => ['error','sql'], ], ~~~ 設置后,就會單獨生成`error` 和 `sql`兩個類型的日志文件,主日志文件中將不再包含這兩個級別的日志信息。 > `V5.1.17+`版本開始,如果`apart_level`設置為`true`,則表示所有的日志類型都會獨立記錄。 ### 單文件日志 默認情況下,日志是按照日期為目錄,按天為文件生成的,但如果希望僅生成單個文件(方便其它的工具或者服務讀取以及分析日志)。 ~~~ return [ 'single' => true, 'file_size' => 1024*1024*10, ]; ~~~ 開啟生成單個文件后,`file_size`和`apart_level`參數依然有效,超過文件大小限制后,系統會自動生成備份日志文件。 默認的單文件日志名是`single.log`,如果需要更改日志文件名,可以設置 ~~~ return [ 'single' => 'single_file', 'file_size' => 1024*1024*10, ]; ~~~ 那么實際生成的日志文件名是 `single_file.log`,如果設置了`apart_level`的話,可能還會生成 `single_file.error.log`之類的日志。 >[info] `V5.1.25+`版本開始,單文件日志也支持`max_files`參數設置,因為單文件日志同樣會生成多個日志備份文件而導致日志文件數據過大。 ### 寫入授權 日志支持寫入授權,我們可以設置某個請求的日志授權Key,然后設置允許授權寫入的配置`Key`,實現個別用戶日志記錄的功能,從而提高高負載下的日志記錄性能。 首先需要在應用配置文件或者應用公共文件中添加當前訪問的授權Key定義,例如: ~~~ // 設置IP為授權Key Log::key(Request::ip()); ~~~ 然后在日志配置參數中增加`allow_key`參數,如下: ~~~ return [ // 日志類型為File 'type' => 'File', // 授權只有202.12.36.89 才能記錄日志 'allow_key' => ['202.12.36.89'], ] ~~~ ### 清空日志 一旦執行`save`方法后,內存中的日志信息就會被自動清空,如果需要手動清空可以使用: ~~~ Log::clear(); ~~~ 在清空日志方法之前,你可以使用`getLog`方法獲取內存中的日志。 ~~~ // 獲取錯誤類型日志 $error = Log::getLog('error'); // 獲取全部日志 $logs = Log::getLog(); ~~~ >[danger] 日志清空僅僅是清空內存中的日志。 ### 日志自動清理(`V5.1.6+`) 從`V5.1.6+`版本開始,文件類型的日志支持自動清理。可以設置`max_files`參數,超過數量的最早日志將會自動刪除。 例如,下面設置日志最多保存數量為30個 ~~~ return [ 'type' => 'File', 'max_files' => 30, ]; ~~~ >[info] 設置`max_files`參數后,日志文件將不會分日期子目錄存放。 > ### JSON格式日志(`V5.1.15+`) 從`V5.1.15+`版本開始,可以支持`JSON`格式記錄文件日志,更加方便一些第三方日志分析工具進行日志分析。 在日志配置文件中,添加 ~~~ 'json' => true ~~~ 即可開啟`JSON`格式記錄,CLI命令行的日志記錄同樣有效。 使用JSON格式記錄后,每次請求是一行JSON數據,但如果使用`Log::write`記錄的日志是例外的單獨一行JSON數據。 > JSON格式記錄日志的時候,獨立記錄日志級別參數`apart_level`無效。
                  <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>

                              哎呀哎呀视频在线观看