Slim研讀筆記七亂入篇之Monolog(上)

2021-08-13 10:41:58 字數 1528 閱讀 8004

最近兩天,我的同事小濤濤因開發需要,急需乙個日誌系統來記錄日誌。所以,從這節開始我們講解monolog,深入理解下monolog的使用方式與實現原理。在開始研讀之前,我們需要理清二個概念異常和錯誤。

異常是exception類的物件,在遇到無法修復的狀況時丟擲(例如,遠端 api 無響應,資料庫查詢失敗等),我們稱這些狀況為異常狀況。

exception 物件與其他任何 php 物件一樣,使用 new 關鍵字例項化,exception 物件有兩個主要的屬性:乙個是訊息,乙個是數字**。訊息用於描述出現的問題,數字**是可選的,用於為指定的異常提供上下文,例項化 exception 物件時可以像下面這樣設定訊息和可選的數字**:

$exception = new exception('danger, will robinson!', 100);
我們可以使用公開的例項化方法 getcode() 和 getmessage() 獲取 exception 物件的這兩個屬性:

$code = $exception->getcode();

$message = $exception->getmessage();

列印該異常物件可看到這樣的結果

異常還提供了其他公共方法,比如獲取異常檔案、行,異常跟蹤等。

php曾給出一系列異常處理類,但通過這些異常處理類我們就可以處理所有的異常程式了嗎?答案是不可能的,但php允許我們註冊乙個全域性異常處理程式,用於捕獲所有未處理的異常。異常處理程式使用set_exception_handler()函式註冊。

除了異常之外,php 還提供了用於報告錯誤的函式,php 能觸發不同級別的錯誤,如致命錯誤、執行時錯誤、編譯時錯誤、啟動錯誤和使用者觸發的錯誤等,錯誤與異常的乙個不同點是錯誤會中斷程式的執行。我們平時最常見的錯誤是由語法錯誤或未捕獲異常導致的錯誤。

錯誤和異常的差別很小,如果 php 指令碼由於某種原因根本無法執行,通常會觸發錯誤。我們還可以使用 trigger_error 函式自己觸發錯誤,然後使用自定義的錯誤處理程式進行處理,不過,編寫執行在使用者空間裡的**時最好使用異常。與錯誤不同的是,php 異常可以在 php 應用的任何層級丟擲和捕獲。異常提供的上下文資訊比錯誤多,而且我們可以擴充套件最頂層的 exception 類,建立自定義的異常子類。異常加上乙個好的日誌記錄器(如 monolog)比錯誤能解決更多的問題。不過,話說回來,現代 php 開發者必須能**並處理 php 錯誤及異常。錯誤處理程式使用set_error_handler()函式註冊。

在生產環境中,我們不會直接在頁面顯示異常及錯誤,而是將它們記錄到日誌,php 提供了 error_log() 函式,通過這個函式可以將錯誤訊息寫入檔案系統或 syslog,還可以通過郵件傳送錯誤訊息,不過除此之外,我們還有更好的選擇 —— monolog。讓我們開啟monolog之旅吧。

Slim研讀筆記七亂入篇之Monolog(補)

monolog是最為廣泛的php日誌庫,它有幾十個處理程式可記錄日誌到不同的程式中。柚子前段時間也曾寫過一篇關於monolog研讀博文,分析了monolog最重要兩個類中的關鍵 這節,介紹一些實用性的東東,譬如 如何用monolog開發elk可以使用的日誌。logstash是乙個開源的日誌管理工具,...

Slim研讀筆記八之路由(下)

跟隨上節的腳步繼續研讀 上節檢視到了slim router類的map方法。這節讓我們根據乙個請求的執行過程具體學習下這個路由的核心類。增加乙個路由 字首父組 if this routegroups 將請求方法變為大寫 according to rfc methods are defined in u...

Slim研讀筆記二之造一款Slim應用

工欲善其事,必先利其器。柚子意圖研讀slim框架,若沒有乙個好的slim應用,也會顯得無從下手。所以,研讀第一步是 造一款slim應用。在我們即將要建立的slim應用中,用到了 twig模板引擎 monolog日誌管理元件 eloquent資料庫orm元件 這些都是柚子做專案時經常用到的元件,隨著框...