摘要:格式化器用來規范化并格式化輸入的記錄,以便處理器能輸出一些有用的信息。只支持使用中定義的八個級別調試信息提示警告錯誤嚴重警報緊急來作為基本的篩選目的。警報必須立即采取行動。這個值依賴格式化器的配置。
前言
最近項目中使用的 Monolog 出了點小問題,去翻其文檔,發現居然只有英文的。趁業余時間,翻譯一下吧。
以下是其使用說明的中文翻譯。更多翻譯內容見 clarence-pan/monolog-zh-doc.
安裝
核心概念
日志級別
配置一個日志服務
為記錄添加額外的數據
使用通道
自定義日志格式
安裝Monolog 在 Packagist (monolog/monolog) 上可用,并且可以通過 Composer 安裝:
composer require monolog/monolog
如果你不使用 Composer, 那你可以從 GitHub 上獲取代碼,然后使用任何兼容 PSR-0 的自動加載器(比如Symfony2 ClassLoader 組件)來加載 Monolog 的類
核心概念每一個日志服務實例 (Logger) 都有一個通道(名稱),并有一個處理器 (Handler)棧. 無論何時你添加一條 記錄 到對應的日志服務實例,這個處理器棧將被遍歷一遍:每個處理器都將依次決定是否要處理這條記錄,而如果要處理,則遍歷結束(譯注:類似DOM事件冒泡)。
這樣子可以創建非常靈活的日志配置。比如一個 StreamHandler 可以把所有日志都寫入磁盤,而上面加個MailHandler 可以把錯誤日志作為郵件發送出去。處理器還有一個 $bubble 屬性定義了是否屏蔽某條記錄或者處理了某條記錄。在這個示例中,配置 MailHandler 的 $bubble 參數為 false 則意味著 MailHandler 將不會把自己已處理過的記錄繼續冒泡給 StreamHandler.
你可以創建許多日志服務實例(Logger),每一個則定義一個通道(比如數據庫、請求、路由...)。而每一個日志服務實例都可以組合各種各樣的處理器,可以共享處理器也可以不共享。這個通道將會在日志中反映出來,從而允許你可以很容易地查看或者篩選記錄。
每一個處理還會有一個格式化器(Formatter)。如果你沒有配置一個,則一個有意義的默認的格式化器將被創建。格式化器用來規范化并格式化輸入的記錄,以便處理器能輸出一些有用的信息。
不支持自定義的嚴重性級別。只支持使用RFC 5424中定義的八個級別(調試/Debug、信息/Info、提示/Notice、警告/Warning、錯誤/Error、嚴重/Critical、警報/Alert、緊急/Emergency)來作為基本的篩選目的。不過,如果為了排序或者其他需要靈活性的使用場景,你可以添加加工程序(Processor)從而可以在(處理器)處理前添加額外的信息(標簽、用戶IP...)。
日志級別Monolog 支持一下 RFC 5424 中的日志級別:
調試/DEBUG (100): 詳細的調試信息。
信息/INFO (200): 有意義的事件,比如用戶登錄、SQL日志。
提示/NOTICE (250): 正常但是值得注意的事件。
警告/WARNING (300): 異常事件,但是并不是錯誤。比如使用了廢棄了的API,錯誤地使用了一個API,以及其他不希望發生但是并非必要的錯誤。
錯誤/ERROR (400): 運行時的錯誤,不需要立即注意到,但是需要被專門記錄并監控到。
嚴重/CRITICAL (500): 邊界條件/危篤場景。比如應用組件不可用了,未預料到的異常。
警報/ALERT (550): 必須立即采取行動。比如整個網站都掛了,數據庫不可用了等。這種情況應該發送短信警報,并把你叫醒。
緊急/EMERGENCY (600): 緊急請求:系統不可用了。
配置一個日志服務這里有一個基本的配置,可以記錄日志到文件,并在 DEBUG 級別下記錄到 firephp 中:
pushHandler(new StreamHandler(__DIR__."/my_app.log", Logger::DEBUG)); $logger->pushHandler(new FirePHPHandler()); // 現在你就可以用日志服務了 $logger->info("My logger is now ready");
解釋一下。第一步是創建日志服務實例,這個實例后將在代碼中用到。唯一的參數是通道的名稱,它在你有多個日志服務實例的時候很有用。(更多詳情參見下面)
這個日志服務實例自己是不是知道如何處理一條日志記錄的。它把記錄代理給了一些處理器。上面的代碼中注冊了兩個處理器到棧中,以便允許使用兩種不同的方式來處理日志記錄。
注意,FirePHPHandler 是被先調用的,因而它被添加到了棧頂。這允許你臨時添加一個禁止冒泡的處理器從而允許你覆蓋其他配置的日志(處理器)。
為記錄添加額外的數據如果你多帶帶使用 Monolog, 并且在尋找一種簡單的方式來配置許多處理器,那可以用
theorchard/monolog-cascade 。
它可以幫你使用PHP數組、YAML或者JSON來構建復雜的日志配置。
Monolog 提供了兩種不同的方式來為簡單的文本消息增加額外的信息
使用上下文(context)第一種方式是使用上下文(context),這允許你在傳遞記錄的時候傳遞一個數組格式的數據:
info("Adding a new user", array("username" => "Seldaek"));
簡單的處理器(比如StreamHandler)將只是把數組轉換成字符串。而復雜的處理器則可以利用上下文的優點(如 FirePHP 則將以一種優美的方式顯示數組)。
使用加工程序(Processor)第二種方式是使用加工程序來為所有的記錄添加額外數據。加工程序可以是任何可以調用的函數。
加工程序接收日志記錄作為參數,并且需要在修改了extra字段后再返回日志記錄。讓我們來寫一個添加一些假數據的加工程序:
pushProcessor(function ($record) { $record["extra"]["dummy"] = "Hello world!"; return $record; });
Monolog提供了一些內置的加工程序,你可以在你的項目中使用它們。請參見對應的章節.
使用通道小技巧:加工程序可以被注冊到一個特定的處理器上而不是直接在日志服務實例上,從而可以只在對應的處理器上生效。
通道是一種非常棒的方式來區分是應用的哪個部分的日志被記錄下來的。這通常在大型項目中非常有用(而且被Symfony2的MonologBundle所使用)。
假設有兩個日志服務實例共享了一個處理器,這個處理器將日志寫入單個日志文件。通道則將允許你來區分是哪個日志服務實例記錄了哪條日志。你可以很簡單地通過通道來篩選日志。
pushHandler($stream); $logger->pushHandler($firephp); // 使用另外的通道來創建安全相關的日志服務示例 $securityLogger = new Logger("security"); $securityLogger->pushHandler($stream); $securityLogger->pushHandler($firephp); // 或者克隆第一個,只是改變下通道 $securityLogger = $logger->withName("security");自定義日志格式
在Monolog中,可以很簡單地來自定義日志的格式,無論是寫入文件、套接字、郵件、數據庫還是其他處理器。大多數處理器都是用 $record["formatted"] 這個值來自動寫入日志設備。這個值依賴格式化器的配置。你可以選擇預定義的格式化器類,也可以自己寫一個(比如一個可讀的多行文本文件)。
想要配置一個預定義的格式化器類,可以直接把它設置為處理器的字段:
// 默認的日期格式是 "Y-m-d H:i:s" $dateFormat = "Y n j, g:i a"; // 默認的輸出格式是 "[%datetime%] %channel%.%level_name%: %message% %context% %extra% " $output = "%datetime% > %level_name% > %message% %context% %extra% "; // 最后創建一個格式化器 $formatter = new LineFormatter($output, $dateFormat); // 創建一個處理器 $stream = new StreamHandler(__DIR__."/my_app.log", Logger::DEBUG); $stream->setFormatter($formatter); // 將其綁定到日志服務對象上 $securityLogger = new Logger("security"); $securityLogger->pushHandler($stream);
// 你還可以在多個處理器之間復用同一個格式化器,并且在多個日志服務實例間共享這些處理器。
處理器、格式化器和加工程序 →
說明:本文首發地址:https://www.clarencep.com/201...,轉載請注明出處,如有翻譯得不當之處歡迎指正。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23173.html
摘要:建議使用折音號操作符。對于使用作為版本號標準的項目來說,這種版本約束方式很實用。折音號操作符的行為跟有比較大的關聯,它允許升級版本到安全的版本。 這篇文章主要介紹一些常用的包管理命令以及包的版本如何進行約束。 常用命令 require命令 在《Composer快速入門》中已經簡單介紹過使用install命令安裝依賴的方式。除了install命令,我們還可以使用require命令快速的安...
摘要:注冊登錄登錄創建選擇安裝擴展使用方法來自配置獲取測試少寫個分號查看效果發送到對象當方法調用時執行資源你也可以本地搭建之部署到生產環境搭建自己的服務基于安裝自 注冊登錄 GitHub登錄showImg(https://segmentfault.com/img/bVbgcrL?w=1109&h=554); 創建project 選擇 laravelshowImg(https://segme...
摘要:當你添加一條記錄時,記錄會依次通過堆棧的處理。而每個也可以決定是否把記錄傳遞到下一個堆棧里的下一個。同時我們把放在堆棧的最上面,通過設置日志等級把錯誤日志通過郵件發送出去。可以創建多個,每個都可以定義自己的頻道名和堆棧。 Monolog是PHP的一個日志類庫。相比于其他的日志類庫,它有以下的特點: 功能強大。可以把日志發送到文件、socket、郵箱、數據庫和各種web servic...
摘要:默認情況下它不會在全局安裝任何東西。這種想法并不新鮮,受到了和的強烈啟發。其中一些庫依賴于其他庫。系統要求運行需要以上版本。一些敏感的設置和編譯標志也是必須的,但對于任何不兼容項安裝程序都會拋出警告。這是的二進制文件。 Composer 是 PHP 的一個依賴管理工具。它允許你申明項目所依賴的代碼庫,它會在你的項目中為你安裝他們。 1. 依賴管理 Composer 不是一個包管理器...
摘要:使用開發一個自動交割的項目,把使用到的開源擴展包及特性整理起來,以供后續使用。一安裝提示工具是一個極其好用的代碼提示及補全工具,可以給編寫代碼帶來極大的便利。更多關于的任務調度,請看考該文的任務調度計劃任務功能 使用 Laravel5.5 開發一個自動交割的項目,把使用到的開源擴展包及特性整理起來,以供后續使用。 一、安裝IDE提示工具 Laravel IDE Helper 是一個極其...
閱讀 989·2021-11-23 09:51
閱讀 2703·2021-08-23 09:44
閱讀 664·2019-08-30 15:54
閱讀 1439·2019-08-30 13:53
閱讀 3112·2019-08-29 16:54
閱讀 2531·2019-08-29 16:26
閱讀 1197·2019-08-29 13:04
閱讀 2322·2019-08-26 13:50