<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之旅 廣告
                # 日志處理 ### 日志配置 日志的配置文件是配置文件目錄下的`log.php`文件,系統在進行日志寫入之前會讀取該配置文件進行初始化 ``` return [ // 默認日志記錄通道 'default' => 'file', // 日志記錄級別 'level' => [], // 日志類型記錄的通道 ['error'=>'email',...] 'type_channel' => [], // 日志通道列表 'channels' => [ 'file' => [ // 日志記錄方式 'type' => 'File', // 日志保存目錄 'path' => '', // 單文件日志寫入 'single' => false, // 獨立日志級別 'apart_level' => [], // 最大日志文件數量 'max_files' => 0, ], // 其它日志通道配置 ], ]; ``` 可以添加多個日志通道,每個通道可以設置不同的日志類型。日志配置參數根據不同的日志類型有所區別,內置的日志類型包括:`file`,日志類型使用`type`參數配置即可。 > 如果是自定義驅動,`type`的值則為自定義驅動的類名(包含命名空間) 日志全局配置參數: | 參數 | 描述 | | --- | --- | | default | 默認的日志通道 | | level | 允許記錄的日志級別 | | type_channel | 日志類型記錄的通道 | > 默認的日志類型是`File`方式,可以通過驅動的方式來擴展支持更多的記錄方式。 文件類型日志的話,還支持下列配置參數: | 參數 | 描述 | | --- | --- | | path | 日志存儲路徑 | | file_size | 日志文件大小限制(超出會生成多個文件) | | apart_level | 獨立記錄的日志級別 | | time_format | 時間記錄格式 | | single | 是否單一文件日志 | | max_files | 最大日志文件數(超過自動清理 ) | | format | 日志輸出格式 | | realtime_write | 是否實時寫入 | > 為了避免同一個目錄下面的日志文件過多的性能問題,日志文件會自動生成日期子目錄。 ### 日志寫入 一般日志是自動寫入的,手動寫入日志使用這兩個方法 >record 方法(記錄日志信息到內存) ``` Log::record('日志信息'); //默認日志級別是info,也可以手動指定 Log::record('這是一條警告日志','notice'); ``` >write方法(實時記錄) ``` Log::write('測試日志信息,這是警告級別,并且實時寫入','notice'); ``` 配置文件中開啟實時寫入 ``` // 實時寫入 'realtime_write' => true, ``` ### 關閉日志 ``` Log::close(); ``` ### 日志級別 日志的級別從低到高依次為:`debug`,`info`,`notice`,`warning`,`error`,`critical`,`alert`,`emergency`,ThinkPHP額外增加了一個`sql`日志級別僅用于記錄`SQL`日志(并且僅當開啟數據庫調試模式有效) > 系統發生異常后記錄的日志級別是`error` ``` Log::error('錯誤信息'); Log::info('日志信息'); ``` 提供助手函數 ``` trace('錯誤信息', 'error'); trace('日志信息', 'info'); ``` >默認情況下是不會記錄HTTP異常日志(避免受一些攻擊的影響寫入大量日志),除非你接管了系統的異常處理,重寫了`report`方法 ### 日志上下文 日志可以傳入上下文信息(數組),并且被替換到日志內容中 ``` Log::info('日志信息{user}',['user'=>'張三']); ``` ### 獨立日志 為了便于分析,`File`類型的日志還支持設置某些級別的日志信息單獨文件記錄: ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', // error和sql日志單獨記錄 'apart_level' => ['error','sql'], ], ], ]; ``` 設置后,就會單獨生成`error`和`sql`兩個類型的日志文件,主日志文件中將不再包含這兩個級別的日志信息 > 如果`apart_level`設置為`true`,則表示所有的日志類型都會獨立記錄 ### 單文件日志 默認情況下,日志是按照日期為目錄,按天為文件生成的,但如果希望僅生成單個文件(方便其它的工具或者服務讀取以及分析日志) ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'single' => true, 'file_size' => 1024*1024*10, ], ], ]; ``` 開啟生成單個文件后,`file_size`和`apart_level`參數依然有效,超過文件大小限制后,系統會自動生成備份日志文件。 默認的單文件日志名是`single.log`,如果需要更改日志文件名,可以設置 ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'single' => 'single_file', 'file_size' => 1024*1024*10, ], ], ]; ``` 那么實際生成的日志文件名是`single_file.log`,如果設置了`apart_level`的話,可能還會生成`single_file_error.log`之類的日志 > 單文件日志也支持`max_files`參數設置,因為單文件日志同樣會生成多個日志備份文件而導致日志文件數據過大 ### 寫入處理 日志支持寫入回調處理,通過事件的方式處理。 ``` Event::listen('think\event\LogWrite', function($event) { if('file' == $event->channel) { $event->log['info'][] = 'test info'; } }); ``` ### 格式化日志信息 系統提供了兩個參數用于日志信息的格式化,第一個是用于自定義時間顯示格式的`time_format`,第二個是調整日志輸出格式的`format`參數 ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'json' => true 'file_size' => 1024*1024*10, 'time_format' => 'Y-m-d H:i:s', 'format' => '[%s][%s]:%s', ], ], ]; ``` ### 清空日志 一旦執行`save`方法后,內存中的日志信息就會被自動清空,如果需要手動清空可以使用: ``` Log::clear(); ``` 在清空日志方法之前,你可以使用`getLog`方法獲取內存中的日志。 ``` // 獲取全部日志 $logs = Log::getLog(); ``` > 日志清空僅僅是清空內存中的日志。 ### 日志自動清理 文件類型的日志支持自動清理。可以設置`max_files`參數,超過數量的最早日志將會自動刪除。 ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'max_files' => 30, 'file_size' => 1024*1024*10, ], ], ]; ``` > 設置`max_files`參數后,日志文件將不會分日期子目錄存放。 ### JSON格式日志 可以支持`JSON`格式記錄文件日志,更加方便一些第三方日志分析工具進行日志分析。 ``` return [ 'default' => 'file', 'channels' => [ 'file' => [ 'type' => 'file', 'json' => true 'file_size' => 1024*1024*10, ], ], ]; ``` 即可開啟`JSON`格式記錄,CLI命令行的日志記錄同樣有效。 使用JSON格式記錄后,每次請求是一行JSON數據,但如果使用`Log::write`記錄的日志是例外的單獨一行JSON數據。 ### 日志通道 你可以配置不同的日志通道,并且把不同的日志記錄到不同的通道。 ``` Log::channel('email')->info('一條測試日志'); Log::channel('socket')->error('記錄錯誤日志'); ``` 你可以配置不同的日志類型,記錄到不同的日志通道,這樣在記錄日志的時候會自動選擇對應的通道寫入。 ``` return [ 'default' => 'file', 'type_channel' => [ 'error' => 'email', 'sql' => 'sql', ], 'channels' => [ 'file' => [ 'type' => 'file', ], 'email' => [ 'type' => 'email', ], 'sql' => [ 'type' => 'sql', ], ], ]; ``` 表示如果是`error`日志和`sql`日志,會分別記錄到指定的通道。同時你還需要在日志配置文件中,添加`email`和`sql`日志通道的配置。核心只有`file`日志類型,其它的可能需要自己擴展或者安裝擴展。 如果需要獲取內存中的通道日志信息,可以使用 ``` // 獲取某個日志通道的日志 $error = Log::getLog('file'); ``` 可以單獨關閉某個通道的日志寫入,只需要把日志通道的`close`配置參數設置為`true`,或者使用方法關閉。 ``` Log::close('file'); ``` 可以單獨清空某個通道的日志(如果沒有開啟實時寫入的話) ``` Log::clear('file'); ``` ### 自定義驅動 如果需要自定義日志驅動,你需要實現`think\contract\LogHandlerInterface`接口。 ``` interface LogHandlerInterface { /** * 日志寫入接口 * @access public * @param array $log 日志信息 * @return bool */ public function save(array $log): bool; } ```
                  <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>

                              哎呀哎呀视频在线观看