首頁 php框架 ThinkPHP ThinkPHP6.0版本的日誌變化

ThinkPHP6.0版本的日誌變化

Dec 16, 2019 pm 01:41 PM
變化 紀錄

ThinkPHP6.0版本的日誌變化

6.0的日誌類比先前版本完善了許多,主要新功能包括:

    ·日誌資訊格式化

    ·多通道寫入支援

    ·延遲/即時寫入

    ·日誌訊息處理事件

    ·#日誌層級指定頻道寫入

    ·支援關閉日誌/頻道

新版的日誌類別最大的變更就是支援多頻道寫入,也就是說你可以同時或為部分日誌類型增加另外的日誌通道寫入,例如對於某些異常日誌可以選擇傳送錯誤到郵件通知。

其它的變化主要包括:

    ·WEB日誌和CLI日誌合併並統一格式;

#    ·預設不再記錄存取訊息,需要可以自行記錄;

    ·#獨立日誌也支援JSON格式記錄;

日誌的相關配置可以在config/log.php檔案中設置,本篇主要描述下新版日誌的變更。

日誌通道

日誌通道的概念相當於給日誌資訊做了一個日誌空間,每個日誌通道的日誌資訊都採用獨立的寫入機製或是配置參數,你可以為日誌訊息指定預設的日誌頻道,也可以動態切換頻道寫入,並且支援同一個日誌訊息同時寫入多個日誌頻道。

你可以在日誌設定檔的channels配置中定義通道,預設只定義了一個file通道。

// 日志通道列表
'channels'     => [
    'file' => [
        // 日志记录方式
        'type'           => 'File',
        // 日志保存目录
        'path'           => '',
        // 单文件日志写入
        'single'         => false,
        // 独立日志级别
        'apart_level'    => [],
        // 最大日志文件数量
        'max_files'      => 0,
        // 使用JSON格式记录
        'json'           => false,
        // 日志输出格式化
        'format'         => '[%s][%s] %s',
        // 是否实时写入
        'realtime_write' => false,
    ],
    // 其它日志通道配置
],
登入後複製

每個日誌通道必須指定type參數,該參數決定了日誌的寫入方式是什麼,file就表示檔案日誌方式寫入,如果需要指定其它的寫入方式需要安裝額外的擴展。但你也可以給不同的日誌頻道指定相同的type,只是其它的配置參數不同,例如寫入的路徑不同之類。

無論使用什麼日誌寫入類型,每個日誌通道可以支援的通用配置如下:

ThinkPHP6.0版本的日誌變化

level參數的用法和全域日誌配置一致,除了在命令列模式下,預設的日誌都是在請求結束後統一一次性寫入,如果需要即時寫入日誌資訊需要設定。

'realtime_write'=>true,
登入後複製

如果在命令列下,無論是否設定都會自動即時寫入日誌。

預設通道

透過設定default參數定義日誌的預設通道,例如:

'default'=>'file',
登入後複製

等級通道

可以設定不同的日誌等級使用不同的日誌通道。

'type_channel'=>[
// 对于error日志级别 同时写入file和email两个日志通道
'error'=>['file','email'],
]
登入後複製

設定了等級通道後,該等級的日誌不會記錄到預設頻道,請注意。

日誌頻道需要日誌驅動程式的配合,你也可以自訂日誌驅動程式。

切換通道

你也可以手動切換目前的日誌的預設寫入通道,例如:

Log::channel('email')->info('这是日志信息');
登入後複製

支援切換使用多個通道記錄,例如:

Log::channel(['email', 'file'])->info('这是日志信息');
登入後複製

日誌處理

日誌寫入支援事件監聽,例如:

Event::listen('think\event\LogWrite', function($event) {
    if('file' == $event->channel) {
        $event->log['info'][] = 'test info';
    }
});
登入後複製

閉包的參數是LogWrite事件類別物件實例,你可以取得兩個屬性:

ThinkPHP6.0版本的日誌變化

日誌資訊是一個二維數組,包含了目前日誌通道下(允許記錄的)所有層級的日誌資訊。

格式化日誌資訊

系統提供了兩個參數用於日誌資訊的格式化,第一個是用於自訂時間顯示格式的time_format,第二個是調整日誌輸出格式的format參數。

'channels'    =>    [
    'file'    =>    [
        'type'          => 'file', 
        'json'        =>true
        'file_size'   => 1024*1024*10,    
        'time_format'   =>    'Y-m-d H:i:s',
        'format'        =>    '[%s][%s]:%s',
    ],
],
登入後複製

format參數的第一個%s是日誌記錄時間(日誌時間的格式化由time_format參數定義) 第二個%s是日誌等級第三個%s是日誌信息,順序不能調整。

JSON格式日誌

可以支援JSON格式記錄檔案日誌,更方便一些第三方日誌分析工具進行日誌分析。

在日誌設定檔中,新增

return [
    'default'      => 'file',
    'channels'    =>    [
        'file'    =>    [
            'type'          => 'file', 
            'json'        =>true
            'file_size'   => 1024*1024*10,    
        ],
    ],
];
登入後複製

即可開啟JSON格式記錄,CLI命令列的日誌記錄也同樣有效。

和之前版本的区别在于,新版的每个日志信息都是一条JSON数据(旧版本是每个请求一条JSON数据)。

关闭日志

你可以通过调用close方法动态关闭日志写入。

// 关闭全局日志写入
Log::close();
// 关闭某个通道日志写入
Log::close('file');
登入後複製

如果调用close方法动态关闭日志,会自动调用clear方法清空日志。

清空日志

一旦执行save方法后,内存中的日志信息就会被自动清空,如果需要提前清空日志可以使用:

// 清空所有日志
Log::clear();
//清空通道日志可以使用
Log::clear('file');
登入後複製

在清空日志方法之前,你可以使用getLog方法获取内存中的日志。

// 获取(默认通道)日志
$logs = Log::getLog();
// 获取指定通道日志
$logs = Log::getLog('file');
登入後複製

日志清空仅仅是清空内存中的日志。

自定义驱动

日志通道需要自定义日志驱动,该日志驱动需要实现think\contract\LogHandlerInterface接口。

interface LogHandlerInterface
{
    /**
     * 日志写入接口
     * @access public
     * @param  array $log 日志信息
     * @return bool
     */
    public function save(array $log): bool;
}
登入後複製

众多ThinkPHP教程,尽在PHP中文网,欢迎在线学习!

本文转自:https://blog.thinkphp.cn/1186947

以上是ThinkPHP6.0版本的日誌變化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win10的事件ID 6013是什麼? win10的事件ID 6013是什麼? Jan 09, 2024 am 10:09 AM

win10的日誌可以幫助使用者詳細的了解系統使用情況,很多的使用者在尋找自己的管理日誌的時候,一定都遇到過日誌6013吧,那麼這個程式碼的意思是什麼呢,下面就來介紹一下。 win10日誌6013是什麼:1.這個是正常的日誌。這個日誌的資訊並不是表示你的電腦重啟了,而是說明自從上次啟動以來,系統運行了多長的時間了。日誌會每天12點整出現一次。如何查看系統運作多久了,可以在cmd中輸入systeminfo。其中有一行就是。

日誌記錄器緩衝區大小日誌有什麼用 日誌記錄器緩衝區大小日誌有什麼用 Mar 13, 2023 pm 04:27 PM

作用是:給工程師們回饋使用資訊與記錄方便分析問題(開發時使用的);由於使用者本身不是經常產生上傳日誌,所以對使用者無用。日誌記錄緩衝區是小型的、用於短期儲存將寫入到磁碟上的重做日誌的變更向量的臨時區域。日誌緩衝區對磁碟的一次寫入是來自多個交易的一批變更向量。即使如此,日誌緩衝區中的變更向量也是接近即時寫入磁碟,當會話發出COMMIT語句時,會即時執行日誌緩衝區寫入操作。

解決Win10中的事件7034錯誤日誌問題 解決Win10中的事件7034錯誤日誌問題 Jan 11, 2024 pm 02:06 PM

win10的日誌可以幫助用戶詳細的了解系統使用情況,很多的用戶在尋找自己的管理日誌的時候,肯定都看到過很多的錯誤日誌吧,那麼該怎麼解決他們呢,下面就一起來看看吧。 win10日誌事件7034怎麼解決:1、點擊“開始”打開“控制面板”2、找到“管理工具”3、點擊“服務”4、找到HDZBCommServiceForV2.0右鍵“停止服務”,並改為“手動啟動」

如何在ThinkPHP6中使用日誌 如何在ThinkPHP6中使用日誌 Jun 20, 2023 am 08:37 AM

隨著網路和Web應用的快速發展,日誌管理也越來越重要。在開發Web應用時,如何尋找和定位問題是一個非常關鍵的問題。日誌系統是一種非常有效的工具,可以幫助我們實現這些任務。 ThinkPHP6提供了一個強大的日誌系統,可以幫助應用程式開發人員更好地管理和追蹤應用程式中發生的事件。本文將介紹如何在ThinkPHP6中使用日誌系統,以及如何利用日誌系統

如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 Nov 29, 2023 pm 08:46 PM

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

Linux系統查看log日誌指令詳解! Linux系統查看log日誌指令詳解! Mar 06, 2024 pm 03:55 PM

在Linux系統中,可以使用下列指令來查看日誌檔案的內容:tail指令:tail指令用來顯示日誌檔案的末尾內容。它是查看最新日誌資訊的常用命令。 tail[選項][檔案名稱]常用的選項包括:-n:指定要顯示的行數,預設為10行。 -f:即時監視文件內容,並在文件更新時自動顯示新的內容。範例:tail-n20logfile.txt#顯示logfile.txt檔案的最後20行內容tail-flogfile.txt#即時監視logfile.txt檔案的更新內容head指令:head指令用於顯示記錄檔的開頭

了解win10日誌中事件ID455的意義 了解win10日誌中事件ID455的意義 Jan 12, 2024 pm 09:45 PM

win10的日誌有著很多豐富的內容,很多的用戶在尋找自己的管理日誌的時候,肯定都見過事件ID455顯示錯誤,那麼它到底是什麼意思呢,下面就一起來看看。 win10日誌中事件ID455是什麼:1、ID455是訊息儲存開啟日誌檔案時<檔案>發生的錯誤<錯誤>

linux查看日誌的三種指令 linux查看日誌的三種指令 Jan 04, 2023 pm 02:00 PM

linux查看日誌的三種指令分別是:1、tail指令,該指令可以即時查看檔案內容的變更以及日誌檔案;2、multitail指令,該指令可以同時監視多個日誌檔案;3、less指令,指令可以快速查看日誌的更改,並且不會使螢幕混亂。

See all articles