国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 PHP框架中的日志系統(tǒng)

PHP框架中的日志系統(tǒng)

Aug 08, 2016 am 09:32 AM
error exception kohana nbsp shutdown

 

 現(xiàn)在在一家公司做PHP后臺開發(fā)程序猿(我們組沒有前端,做活動時會做前端的東西),剛開始到公司的時候花2個周趕出了一個前端加后臺的活動(記得當時做不出來周末加了兩天班、、、),到現(xiàn)在過去4個多月了,可以用一下午秒掉一個不是很復雜的活動,當然了現(xiàn)在做的時候會考慮很多東西,比如說擴展性、可重用性,因為做的多了,會積累很多類似小插件的東西,所以會很快。。。。。。但是我發(fā)現(xiàn)整天“站在需求里面做需求”很差勁,這樣不會學到系統(tǒng)的、框架類的東西,因為都被瑣碎的需求給困住了,沒有時間去做一些框架重要部分的東西,而且當你的同事、上司習慣了你去做那些事的時候,每次遇到那些沒技術含量的但又不得不做的東西都會毫不猶豫的推給你(自私點的說,每個程序猿都像我一樣吧,都想掌握一塊有技術含量的東西,這樣才有程序猿的自豪感),久而久之你就會習慣、、、、、、這樣真的很慘,所以,我會抽出點時間來學習下框架中的東西,爭取不做一個簡單的碼農。

引言

??? 接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當?shù)脑挷粫苯訏伋鲆淮蠖阎挥谐绦蛟巢耪嬲齽拥挠⑽模?,調試的時候也會很方便,還可以記錄一些重要的操作等等,總之一個完整的項目要是沒了日志系統(tǒng),就已經開發(fā)的路上布滿了荊棘、坑洼,肯定會磕磕絆絆的。

?

簡介

??? 要掌握PHP日志系統(tǒng),必須先對這幾點東西了解透徹。

一、php的幾個函數(shù)

?1 set_exception_handler(callback $exception_handler); //異常捕獲自定義處理函數(shù)注冊?

?1 set_error_handler(callback $error_handler); //錯誤捕獲自定義處理函數(shù)注冊?

?1 register_shutdown_function(callback $callback); //程序執(zhí)行時異常終止錯誤捕獲處理函數(shù)注冊?

??? 這三個函數(shù)在錯誤處理控制中給開發(fā)者提供了很大的自主空間,在日志系統(tǒng)中記錄日志信息有他們的功勞。

??? 在程序中出現(xiàn)異常(exception)問題時,php內核會拋出異常錯誤,然后將錯誤信息打印給使用者,如果注冊了exception處理函數(shù),php拋出的異常會轉給自定義的注冊的異常捕獲函數(shù),這個函數(shù)里面包含了我們要做的處理,記錄錯誤信息(包括錯誤詳細內容、錯誤位置),該函數(shù)處理完異常后,異常就會終止。

??? 當程序中出現(xiàn)error時,我們注冊的error處理函數(shù)會在函數(shù)中將錯誤信息轉化為一個錯誤異常對象傳遞給異常處理函數(shù),也就是第一步的$exception_handler函數(shù)。

??? 當成續(xù)重出現(xiàn)shutdown錯誤時,會執(zhí)行我們注冊的異常終止處理函數(shù),該函數(shù)通過error_get_last()獲取到最后的shutdown時的錯誤對象,接著和上一部一樣,生成一個error exception對象,將該對象傳遞給我們注冊的異常處理函數(shù)。

??? 可以看到,其實不管是異常還是錯誤,都是將自己的信息轉化為異常處理函數(shù)認識的異常信息,然后交給異常處理函數(shù)處理,非異常信息就像化了妝的女人一樣,異常處理程序不認識這些非異常信息,只有將裝卸掉(非異常信息自己轉化為異常信息,準確的說應該是拋出),異常處理才認識。

php日志系統(tǒng)中的錯誤處理流程

??? 那么現(xiàn)在問題來了,這幾個函數(shù)一般會配合一個異常處理類庫,加上一個錯誤日志記錄類庫來進行工作,異常處理類庫中包含要注冊的3個函數(shù),日志記錄類庫在$exception_handler中調用,用來合理的記錄和放置日志文件的位置,上面說到的幾個函數(shù)一般是在程序框架入口處進行加載注冊的,就像下面這樣:

這里面用的是array(class,function)這種方式。

<span>1</span> <span>set_exception_handler</span>(<span>array</span>("Myexception","exceptionHandler"<span>));
</span><span>2</span> <span>set_error_handler</span>(<span>array</span>("Myexception","errorHandler"<span>));
</span><span>3</span> <span>register_shutdown_function</span>(<span>array</span>("Myexception","shutdownHandler"));

二、日志記錄相關類庫

??? 第一部分介紹到的東西只是對異常、錯誤、shutdown進行了捕獲,這只是第一步,接下來還要對捕獲到的信息進行合理的處理,比如說記錄這些日志信息到本地文件系統(tǒng)中(這個操作是在array("Myexception","exceptionHandler")),這個地方就用到了日志記錄類庫。(下面要說的類庫是借鑒了kohana日志系統(tǒng)的設計)。

??? 日式日志記錄也很簡單只要做的將信息添加到文件末尾就行,這個很容易實現(xiàn),相信大家都可以自己實現(xiàn),但是要設計出一個便捷的、高效的、擴展的日志記錄類庫就不那么簡單了,要經過長時間的實踐總結優(yōu)化才可以,kohana框架中的日志記錄類庫已經比較成熟了,因此這里拿來借鑒。

??? 相信使用過kohana的用戶一定對kohana框架中的日志記錄比較熟悉,不熟悉也沒關系,我下面會大概的說說,在kohana源碼中的application/bootstrap.php文件中的第109——112行可以看到下面的代碼:

<span>109</span> <span>/*</span><span>*
</span><span>110</span> <span> * Attach the file write to logging. Multiple writers are supported.
</span><span>111</span>  <span>*/</span>
<span>112</span> Kohana::<span>$log</span>->attach(<span>new</span> Log_File(APPPATH.'logs'));

??? 這個就是添加一個日志記錄對象日志對象中,注意橄欖色打底的倆個,他們是不同的類庫實例,在kohana中,日志記錄對象分為兩部分,第一部分就是日志對象,用來維護一個日志記錄對象的列表,這個要怎么理解呢,其實就像一個容器,里面包含了一個或多個日志記錄對象(這個就是第二部分,這些日志記錄對象才是真正來記錄日志的),還有每個對象要記錄的錯誤等級的數(shù)組,當滿足錯誤等級的時候才會去記錄,不滿足就會略掉。下面是我自己簡化重命名后的日志記錄方式:

<span>1</span> self::<span>$log</span> = <span>Log</span>::<span>instance();
</span><span>2</span> self::<span>$log</span>->attach(<span>new</span> Logwriter("./data/debug"),<span>Log</span>::<span>DEBUG);
</span><span>3</span> self::<span>$log</span>->attach(<span>new</span> Logwriter("./data/notice"),<span>Log</span>::NOTICE);

??? 我這里面為了更好地理解,將“容器”命名為Log,記錄的實例命名為Logwriter,可以看到我在程序入口處很容易的添加了兩不同的日志種類,第一個是記錄所有錯誤號比Log::DEBUG小的錯誤(錯誤級別比他高),并按規(guī)則記錄在文件夾./data/debug下面,第二個是記錄級別等于或高于Log::NOTICE的錯誤,當然了你還可以更詳細制定具體哪些錯誤好,傳遞數(shù)組就行了,這個就是我感覺方便、快捷的地方,我們可以根據需求來添加錯誤日志、分不同的日志目錄,下面看一幅圖也許會有助于理解:

????????????????????????????????????????????????????????????????????????????????????????????????????? log與logwriter的關系

??? 通過上面的圖你就會看到Log是一個容器,包含了具體的不同的logwriter對象,每個對象可能要記錄不同的信息,當錯誤信息要刷到文件中的時候,會運行每一個Logwriter實例,看看自己是否要記錄errormessage中的錯誤,errormessage中的level不包含在Logwriter內時忽略。

??? 這本分和第一部分怎么合作的呢?其實很簡單,當exception捕獲的異常時會調用添加一條錯誤信息(包括錯誤位置、錯誤代號、錯誤信息等信息)到Log容器中的errormessage數(shù)組中,然后當程序結束之后在將這些信息寫入文件,這里還要注意下,也許你在閱讀kohana代碼是發(fā)現(xiàn)沒有明顯的直接寫入到日志中去,這里面kohana優(yōu)化的比較好,因為php的一次執(zhí)行可能出現(xiàn)多個錯誤,如果來一個錯誤你就去記錄一次這樣會在程序返回之前占用多余的io和時間,所以kohana的做法是默認將所有的錯誤、異常、日志存放在Log::$errormessage中,并在實例化的時候講Log中的writer操作注冊register_shutdown_function,這個函數(shù)的作用是在程序異常終止或者執(zhí)行完成之后執(zhí)行,前面第一部分也有使用到,這樣日志記錄就不會對本次php的執(zhí)行產生帶大的影響。

三、實例總結

??? 到這里你應該已經了解了日志系統(tǒng)的大概了,已經可以自己編寫一個”日志系統(tǒng)”來使用了,下面看看我的”日志系統(tǒng)“的例子,這是github地址,里面有代碼和例子,需要的話可以看看。

https://github.com/AizuYan/phplog.git

本文版權歸作者(luluyrt@163.com)和博客園共有,未經作者本人同意禁止任何形式的轉載,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。

以上就介紹了PHP框架中的日志系統(tǒng),包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

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集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

Windows 11 上調整窗口邊框設置的方法:更改顏色和大小 Windows 11 上調整窗口邊框設置的方法:更改顏色和大小 Sep 22, 2023 am 11:37 AM

Windows11將清新優(yōu)雅的設計帶到了最前沿;現(xiàn)代界面允許您個性化和更改最精細的細節(jié),例如窗口邊框。在本指南中,我們將討論分步說明,以幫助您在Windows操作系統(tǒng)中創(chuàng)建反映您的風格的環(huán)境。如何更改窗口邊框設置?按+打開“設置”應用。WindowsI轉到個性化,然后單擊顏色設置。顏色更改窗口邊框設置窗口11“寬度=”643“高度=”500“&gt;找到在標題欄和窗口邊框上顯示強調色選項,然后切換它旁邊的開關。若要在“開始”菜單和任務欄上顯示主題色,請打開“在開始”菜單和任務欄上顯示主題

解決方法:您的組織要求您更改 PIN 碼 解決方法:您的組織要求您更改 PIN 碼 Oct 04, 2023 pm 05:45 PM

“你的組織要求你更改PIN消息”將顯示在登錄屏幕上。當在使用基于組織的帳戶設置的電腦上達到PIN過期限制時,就會發(fā)生這種情況,在該電腦上,他們可以控制個人設備。但是,如果您使用個人帳戶設置了Windows,則理想情況下不應顯示錯誤消息。雖然情況并非總是如此。大多數(shù)遇到錯誤的用戶使用個人帳戶報告。為什么我的組織要求我在Windows11上更改我的PIN?可能是您的帳戶與組織相關聯(lián),您的主要方法應該是驗證這一點。聯(lián)系域管理員會有所幫助!此外,配置錯誤的本地策略設置或不正確的注冊表項也可能導致錯誤。即

如何在 Windows 11 上更改標題欄顏色? 如何在 Windows 11 上更改標題欄顏色? Sep 14, 2023 pm 03:33 PM

默認情況下,Windows11上的標題欄顏色取決于您選擇的深色/淺色主題。但是,您可以將其更改為所需的任何顏色。在本指南中,我們將討論三種方法的分步說明,以更改它并個性化您的桌面體驗,使其具有視覺吸引力。是否可以更改活動和非活動窗口的標題欄顏色?是的,您可以使用“設置”應用更改活動窗口的標題欄顏色,也可以使用注冊表編輯器更改非活動窗口的標題欄顏色。若要了解這些步驟,請轉到下一部分。如何在Windows11中更改標題欄的顏色?1.使用“設置”應用按+打開設置窗口。WindowsI前往“個性化”,然

Windows 11 上啟用或禁用任務欄縮略圖預覽的方法 Windows 11 上啟用或禁用任務欄縮略圖預覽的方法 Sep 15, 2023 pm 03:57 PM

任務欄縮略圖可能很有趣,但它們也可能分散注意力或煩人??紤]到您將鼠標懸停在該區(qū)域的頻率,您可能無意中關閉了重要窗口幾次。另一個缺點是它使用更多的系統(tǒng)資源,因此,如果您一直在尋找一種提高資源效率的方法,我們將向您展示如何禁用它。不過,如果您的硬件規(guī)格可以處理它并且您喜歡預覽版,則可以啟用它。如何在Windows11中啟用任務欄縮略圖預覽?1.使用“設置”應用點擊鍵并單擊設置。Windows單擊系統(tǒng),然后選擇關于。點擊高級系統(tǒng)設置。導航到“高級”選項卡,然后選擇“性能”下的“設置”。在“視覺效果”選

OOBELANGUAGE錯誤Windows 11 / 10修復中出現(xiàn)問題的問題 OOBELANGUAGE錯誤Windows 11 / 10修復中出現(xiàn)問題的問題 Jul 16, 2023 pm 03:29 PM

您是否在Windows安裝程序頁面上看到“出現(xiàn)問題”以及“OOBELANGUAGE”語句?Windows的安裝有時會因此類錯誤而停止。OOBE表示開箱即用的體驗。正如錯誤提示所表示的那樣,這是與OOBE語言選擇相關的問題。沒有什么可擔心的,你可以通過OOBE屏幕本身的漂亮注冊表編輯來解決這個問題??焖傩迯通C1.單擊OOBE應用底部的“重試”按鈕。這將繼續(xù)進行該過程,而不會再打嗝。2.使用電源按鈕強制關閉系統(tǒng)。系統(tǒng)重新啟動后,OOBE應繼續(xù)。3.斷開系統(tǒng)與互聯(lián)網的連接。在脫機模式下完成OOBE的所

Windows 11 上的顯示縮放比例調整指南 Windows 11 上的顯示縮放比例調整指南 Sep 19, 2023 pm 06:45 PM

在Windows11上的顯示縮放方面,我們都有不同的偏好。有些人喜歡大圖標,有些人喜歡小圖標。但是,我們都同意擁有正確的縮放比例很重要。字體縮放不良或圖像過度縮放可能是工作時真正的生產力殺手,因此您需要知道如何對其進行自定義以充分利用系統(tǒng)功能。自定義縮放的優(yōu)點:對于難以閱讀屏幕上的文本的人來說,這是一個有用的功能。它可以幫助您一次在屏幕上查看更多內容。您可以創(chuàng)建僅適用于某些監(jiān)視器和應用程序的自定義擴展配置文件??梢詭椭岣叩投擞布男阅?。它使您可以更好地控制屏幕上的內容。如何在Windows11

10種在 Windows 11 上調整亮度的方法 10種在 Windows 11 上調整亮度的方法 Dec 18, 2023 pm 02:21 PM

屏幕亮度是使用現(xiàn)代計算設備不可或缺的一部分,尤其是當您長時間注視屏幕時。它可以幫助您減輕眼睛疲勞,提高易讀性,并輕松有效地查看內容。但是,根據您的設置,有時很難管理亮度,尤其是在具有新UI更改的Windows11上。如果您在調整亮度時遇到問題,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10種方式解釋]單顯示器用戶可以使用以下方法在Windows11上調整亮度。這包括使用單個顯示器的臺式機系統(tǒng)以及筆記本電腦。讓我們開始吧。方法1:使用操作中心操作中心是訪問

如何修復Windows服務器中的激活錯誤代碼0xc004f069 如何修復Windows服務器中的激活錯誤代碼0xc004f069 Jul 22, 2023 am 09:49 AM

Windows上的激活過程有時會突然轉向顯示包含此錯誤代碼0xc004f069的錯誤消息。雖然激活過程已經聯(lián)機,但一些運行WindowsServer的舊系統(tǒng)可能會遇到此問題。通過這些初步檢查,如果這些檢查不能幫助您激活系統(tǒng),請?zhí)D到主要解決方案以解決問題。解決方法–關閉錯誤消息和激活窗口。然后,重新啟動計算機。再次從頭開始重試Windows激活過程。修復1–從終端激活從cmd終端激活WindowsServerEdition系統(tǒng)。階段–1檢查Windows服務器版本您必須檢查您使用的是哪種類型的W

See all articles