亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) 後端開(kāi)發(fā) php教程 PHP框架中的日誌系統(tǒng)

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

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

 

 現(xiàn)在在一家公司做PHP後臺(tái)開(kāi)發(fā)程式猿(我們組沒(méi)有前端,做活動(dòng)時(shí)會(huì)做前端的東西),剛開(kāi)始到公司的時(shí)候花2個(gè)週趕出了一個(gè)前端加後臺(tái)的活動(dòng)(記得當(dāng)時(shí)做不出來(lái)週末加了兩天班、、、),到現(xiàn)在過(guò)去4個(gè)多月了,可以用一下午秒掉一個(gè)不是很複雜的活動(dòng),當(dāng)然了現(xiàn)在做的時(shí)候會(huì)考慮很多東西,比如說(shuō)擴(kuò)展性、可重複使用性,因?yàn)樽龅亩嗔?,?huì)累積很多類(lèi)似小插件的東西,所以會(huì)很快。 。 。 。 。 。但是我發(fā)現(xiàn)整天「站在需求裡面做需求」很差勁,這樣不會(huì)學(xué)到系統(tǒng)的、框架類(lèi)的東西,因?yàn)槎急滑嵥榈男枨蠼o困住了,沒(méi)有時(shí)間去做一些框架重要部分的東西,而且當(dāng)你的同事、上司習(xí)慣了你去做那些事的時(shí)候,每次遇到那些沒(méi)技術(shù)含量的但又不得不做的東西都會(huì)毫不猶豫的推給你(自私點(diǎn)的說(shuō),每個(gè)程序猿都跟我一樣吧,都想掌握一塊有技術(shù)含量的東西,這樣才有程序猿的自豪感),久而久之你就會(huì)習(xí)慣、、、、、、這樣真的很慘,所以,我會(huì)抽出點(diǎn)時(shí)間來(lái)學(xué)習(xí)下框架中的東西,爭(zhēng)取不做一個(gè)簡(jiǎn)單的碼農(nóng)。

引言

??? 接觸過(guò)php框架的朋友們可能都知道,日誌在專(zhuān)案中的重要作用了,他可以幫助我們定位錯(cuò)誤的位置,讓程式更友善(處理得當(dāng)?shù)脑挷粫?huì)直接拋出一大堆只有程式猿才真正動(dòng)的英文),調(diào)試的時(shí)候也會(huì)很方便,還可以記錄一些重要的操作等等,總之一個(gè)完整的項(xiàng)目要是沒(méi)了日誌系統(tǒng),就已經(jīng)開(kāi)發(fā)的路上佈滿了荊棘、坑洼,肯定會(huì)磕磕絆絆的。

?

簡(jiǎn)介

??? 要掌握PHP日誌系統(tǒng),必須先對(duì)這幾點(diǎn)了解透徹。

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

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

1

set_error_handler(callback $error_handler); //錯(cuò)誤捕捉自訂處理函數(shù)註冊(cè) ?1 register_shutdown_function

(

callback $callback); // ??? 這三個(gè)函數(shù)在錯(cuò)誤處理控制中給開(kāi)發(fā)者提供了很大的自主空間,在日誌系統(tǒng)中記錄日誌資訊有他們的功勞。 ??? 在程式中出現(xiàn)異常(exception)問(wèn)題時(shí),php核心會(huì)拋出異常錯(cuò)誤,然後將錯(cuò)誤訊息列印給使用者,如果註冊(cè)了exception處理函數(shù),php拋出的異常會(huì)轉(zhuǎn)給自訂的註冊(cè)的異常捕獲函數(shù),這個(gè)函數(shù)裡麵包含了我們要做的處理,記錄錯(cuò)誤訊息(包括錯(cuò)誤詳細(xì)內(nèi)容、錯(cuò)誤位置),該函數(shù)處理完異常後,異常就會(huì)終止。 ??? 當(dāng)程式中出現(xiàn)error時(shí),我們?cè)]冊(cè)的error處理函數(shù)會(huì)在函數(shù)中將錯(cuò)誤訊息轉(zhuǎn)換為一個(gè)錯(cuò)誤異常物件傳遞給異常處理函數(shù),也就是第一步的$exception_handler函數(shù)。

??? 當(dāng)成續(xù)重出現(xiàn)shutdown錯(cuò)誤時(shí),會(huì)執(zhí)行我們?cè)]冊(cè)的異常終止處理函數(shù),該函數(shù)透過(guò)error_get_last()取得到最後的shutdown時(shí)的錯(cuò)誤對(duì)象,接著和上一部一樣,產(chǎn)生一個(gè)error exception對(duì)象,將該物件傳遞給我們?cè)]冊(cè)的異常處理函數(shù)。

??? 可以看到,其實(shí)不管是異常還是錯(cuò)誤,都是將自己的信息轉(zhuǎn)化為異常處理函數(shù)認(rèn)識(shí)的異常信息,然後交給異常處理函數(shù)處理,非異常信息就像化了妝的女人一樣,異常處理程序不認(rèn)識(shí)這些非異常訊息,只有將裝卸掉(非異常訊息自己轉(zhuǎn)化為異常訊息,準(zhǔn)確的說(shuō)應(yīng)該是拋出),異常處理才認(rèn)識(shí)。

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

??? 那麼現(xiàn)在問(wèn)題來(lái)了,這幾個(gè)函數(shù)通常會(huì)配合一個(gè)異常處理類(lèi)別庫(kù),加上一個(gè)錯(cuò)誤日誌記錄類(lèi)別庫(kù)來(lái)進(jìn)行工作,異常處理類(lèi)別庫(kù)中包含要註冊(cè)的3個(gè)函數(shù),日誌記錄類(lèi)別庫(kù)在$exception_handler中調(diào)用,用來(lái)合理的記錄和放置日誌檔案的位置,上面說(shuō)到的幾個(gè)函數(shù)一般是在程式框架入口處進(jìn)行載入註冊(cè)的,就像下面這樣:

這裡面用的是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"));

二、日誌記錄相關(guān)類(lèi)別庫(kù)

??? 第一部分介紹到的東西只是對(duì)異常、錯(cuò)誤、shutdown進(jìn)行了捕獲,這只是第一步,接下來(lái)還要對(duì)捕獲到的信息進(jìn)行合理的處理,比如說(shuō)記錄這些日誌信息到本地文件系統(tǒng)中(這個(gè)操作是在array("Myexception","exceptionHandler")),這個(gè)地方就用到了日誌記錄類(lèi)別庫(kù)。 (下面要說(shuō)的類(lèi)別庫(kù)是藉用了kohana日誌系統(tǒng)的設(shè)計(jì))。

??? 日式日誌記錄也很簡(jiǎn)單只要做的將信息添加到文件末尾就行,這個(gè)很容易實(shí)現(xiàn),相信大家都可以自己實(shí)現(xiàn),但是要設(shè)計(jì)出一個(gè)便捷的、高效的、擴(kuò)展的日誌記錄類(lèi)庫(kù)就不那麼簡(jiǎn)單了,要經(jīng)過(guò)長(zhǎng)時(shí)間的實(shí)踐總結(jié)優(yōu)化才可以,kohana框架中的日誌記錄類(lèi)別庫(kù)已經(jīng)比較成熟了,因此這裡拿來(lái)借鑒。

??? 相信使用過(guò)kohana的使用者一定對(duì)kohana框架中的日誌記錄比較熟悉,不熟悉也沒(méi)關(guān)係,我下面會(huì)大概的說(shuō)說(shuō),在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'));

??? 這個(gè)就是增加一個(gè)日誌記錄物件日誌物件中,注意橄欖色打底的兩個(gè),他們是不同的類(lèi)別庫(kù)實(shí)例,在kohana中,日誌記錄物件分為兩部分,第一部分就是日誌對(duì)象,用來(lái)維護(hù)一個(gè)日誌記錄對(duì)象的列表,這個(gè)要怎麼理解呢,其實(shí)就像一個(gè)容器,裡麵包含了一個(gè)或多個(gè)日誌記錄對(duì)象(這個(gè)就是第二部分,這些日誌記錄對(duì)象才是真正來(lái)記錄日誌的),還有每個(gè)物件要記錄的錯(cuò)誤等級(jí)的數(shù)組,當(dāng)滿足錯(cuò)誤等級(jí)的時(shí)候才會(huì)去記錄,不滿足就會(huì)略掉。以下是我自己簡(jiǎn)化重命名後的日誌記錄方式:

<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);

??? 我這裡面為了更好地理解,將「容器」命名為L(zhǎng)og,記錄的實(shí)例命名為L(zhǎng)ogwriter,可以看到我在程式入口處很容易的添加了兩不同的日誌種類(lèi),第一個(gè)是記錄所有錯(cuò)誤編號(hào)比Log::DEBUG小的錯(cuò)誤(錯(cuò)誤等級(jí)比他高),並依規(guī)則記錄在資料夾./data/debug下面,第二個(gè)是記錄等級(jí)等於或高於Log::NOTICE的錯(cuò)誤,當(dāng)然了你還可以更詳細(xì)制定具體哪些錯(cuò)誤好,傳遞數(shù)組就行了,這個(gè)就是我感覺(jué)方便、快捷的地方,我們可以根據(jù)需求來(lái)添加錯(cuò)誤日誌、分不同的日誌目錄,下面看一幅圖也許會(huì)有助於理解:

????????????????????????????????????????????????????????????????????????

??? 透過(guò)上面的圖你就會(huì)看到Log是一個(gè)容器,包含了具體的不同的logwriter對(duì)象,每個(gè)對(duì)象可能要記錄不同的信息,當(dāng)錯(cuò)誤信息要刷到文件中的時(shí)候,會(huì)運(yùn)行每一個(gè)Logwriter實(shí)例,看看自己是否要記錄errormessage中的錯(cuò)誤,errormessage中的level不包含在Logwriter內(nèi)時(shí)忽略。

??? 這本分和第一部分怎麼合作的呢?其實(shí)很簡(jiǎn)單,當(dāng)exception捕獲的異常時(shí)會(huì)呼叫添加一條錯(cuò)誤訊息(包括錯(cuò)誤位置、錯(cuò)誤代號(hào)、錯(cuò)誤訊息等資訊)到Log容器中的errormessage數(shù)組中,然後當(dāng)程式結(jié)束後在將這些資訊寫(xiě)入文件,這裡還要注意下,也許你在閱讀kohana程式碼是發(fā)現(xiàn)沒(méi)有明顯的直接寫(xiě)入到日誌中去,這裡面kohana優(yōu)化的比較好,因?yàn)閜hp的一次執(zhí)行可能出現(xiàn)多個(gè)錯(cuò)誤,如果來(lái)一個(gè)錯(cuò)誤你就去記錄一次這樣會(huì)在程式返回之前佔(zhàn)用多餘的io和時(shí)間,所以kohana的做法是默認(rèn)將所有的錯(cuò)誤、異常、日誌存放在Log::$errormessage中,並在實(shí)例化的時(shí)候講Log中的writer操作註冊(cè)register_shutdown_function,這個(gè)函數(shù)的作用是在程式異常終止或執(zhí)行完成之後執(zhí)行,前面第一部分也有使用到,這樣日誌記錄就不會(huì)對(duì)本次php的執(zhí)行產(chǎn)生帶大的影響。

三、實(shí)例總結(jié)

??? 到這裡你應(yīng)該已經(jīng)了解了日誌系統(tǒng)的大概了,已經(jīng)可以自己寫(xiě)一個(gè)」日誌系統(tǒng)」來(lái)使用了,下面看看我的」日誌系統(tǒng)「的例子,這是github位址,裡面有程式碼和例子,需要的話可以看看。

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

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

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

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Windows 11 上調(diào)整視窗邊框設(shè)定的方法:變更顏色和大小 Windows 11 上調(diào)整視窗邊框設(shè)定的方法:變更顏色和大小 Sep 22, 2023 am 11:37 AM

Windows11將清新優(yōu)雅的設(shè)計(jì)帶到了最前沿;現(xiàn)代介面可讓您個(gè)性化和更改最精細(xì)的細(xì)節(jié),例如視窗邊框。在本指南中,我們將討論逐步說(shuō)明,以協(xié)助您在Windows作業(yè)系統(tǒng)中建立反映您的風(fēng)格的環(huán)境。如何更改視窗邊框設(shè)定?按+開(kāi)啟“設(shè)定”應(yīng)用程式。 WindowsI前往個(gè)人化,然後按一下顏色設(shè)定。顏色變更視窗邊框設(shè)定視窗11「寬度=」643「高度=」500「&gt;找到在標(biāo)題列和視窗邊框上顯示強(qiáng)調(diào)色選項(xiàng),然後切換它旁邊的開(kāi)關(guān)。若要在「開(kāi)始」功能表和工作列上顯示主題色,請(qǐng)開(kāi)啟「在開(kāi)始」功能表和工作列上顯示主題

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

「你的組織要求你更改PIN訊息」將顯示在登入畫(huà)面上。當(dāng)在使用基於組織的帳戶設(shè)定的電腦上達(dá)到PIN過(guò)期限制時(shí),就會(huì)發(fā)生這種情況,在該電腦上,他們可以控制個(gè)人設(shè)備。但是,如果您使用個(gè)人帳戶設(shè)定了Windows,則理想情況下不應(yīng)顯示錯(cuò)誤訊息。雖然情況並非總是如此。大多數(shù)遇到錯(cuò)誤的使用者使用個(gè)人帳戶報(bào)告。為什麼我的組織要求我在Windows11上更改我的PIN?可能是您的帳戶與組織相關(guān)聯(lián),您的主要方法應(yīng)該是驗(yàn)證這一點(diǎn)。聯(lián)絡(luò)網(wǎng)域管理員會(huì)有所幫助!此外,配置錯(cuò)誤的本機(jī)原則設(shè)定或不正確的登錄項(xiàng)目也可能導(dǎo)致錯(cuò)誤。即

如何在 Windows 11 上變更標(biāo)題列顏色? 如何在 Windows 11 上變更標(biāo)題列顏色? Sep 14, 2023 pm 03:33 PM

預(yù)設(shè)情況下,Windows11上的標(biāo)題列顏色取決於您選擇的深色/淺色主題。但是,您可以將其變更為所需的任何顏色。在本指南中,我們將討論三種方法的逐步說(shuō)明,以更改它並個(gè)性化您的桌面體驗(yàn),使其具有視覺(jué)吸引力。是否可以更改活動(dòng)和非活動(dòng)視窗的標(biāo)題列顏色?是的,您可以使用「設(shè)定」套用變更活動(dòng)視窗的標(biāo)題列顏色,也可以使用登錄編輯程式變更非活動(dòng)視窗的標(biāo)題列顏色。若要了解這些步驟,請(qǐng)前往下一部分。如何在Windows11中變更標(biāo)題列的顏色? 1.使用「設(shè)定」應(yīng)用程式按+開(kāi)啟設(shè)定視窗。 WindowsI前往“個(gè)人化”,然

Windows 11 上啟用或停用工作列縮圖預(yù)覽的方法 Windows 11 上啟用或停用工作列縮圖預(yù)覽的方法 Sep 15, 2023 pm 03:57 PM

工作列縮圖可能很有趣,但它們也可能分散注意力或煩人??紤]到您將滑鼠懸停在該區(qū)域的頻率,您可能無(wú)意中關(guān)閉了重要視窗幾次。另一個(gè)缺點(diǎn)是它使用更多的系統(tǒng)資源,因此,如果您一直在尋找一種提高資源效率的方法,我們將向您展示如何停用它。不過(guò),如果您的硬體規(guī)格可以處理它並且您喜歡預(yù)覽版,則可以啟用它。如何在Windows11中啟用工作列縮圖預(yù)覽? 1.使用「設(shè)定」應(yīng)用程式點(diǎn)擊鍵並點(diǎn)選設(shè)定。 Windows按一下系統(tǒng),然後選擇關(guān)於。點(diǎn)選高級(jí)系統(tǒng)設(shè)定。導(dǎo)航至“進(jìn)階”選項(xiàng)卡,然後選擇“效能”下的“設(shè)定”。在「視覺(jué)效果」選

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

您是否在Windows安裝程式頁(yè)面上看到「出現(xiàn)問(wèn)題」以及「OOBELANGUAGE」語(yǔ)句? Windows的安裝有時(shí)會(huì)因此類(lèi)錯(cuò)誤而停止。 OOBE表示開(kāi)箱即用的體驗(yàn)。正如錯(cuò)誤提示所表示的那樣,這是與OOBE語(yǔ)言選擇相關(guān)的問(wèn)題。沒(méi)有什麼好擔(dān)心的,你可以透過(guò)OOBE螢?zāi)槐旧淼钠猎]冊(cè)表編輯來(lái)解決這個(gè)問(wèn)題??焖傩迯?fù)–1.點(diǎn)選OOBE應(yīng)用底部的「重試」按鈕。這將繼續(xù)進(jìn)行該過(guò)程,而不會(huì)再打嗝。 2.使用電源按鈕強(qiáng)制關(guān)閉系統(tǒng)。系統(tǒng)重新啟動(dòng)後,OOBE應(yīng)繼續(xù)。 3.斷開(kāi)系統(tǒng)與網(wǎng)際網(wǎng)路的連接。在脫機(jī)模式下完成OOBE的所

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

螢?zāi)涣炼仁鞘褂矛F(xiàn)代計(jì)算設(shè)備不可或缺的一部分,尤其是當(dāng)您長(zhǎng)時(shí)間注視螢?zāi)粫r(shí)。它可以幫助您減輕眼睛疲勞,提高易讀性,並輕鬆有效地查看內(nèi)容。但是,根據(jù)您的設(shè)置,有時(shí)很難管理亮度,尤其是在具有新UI更改的Windows11上。如果您在調(diào)整亮度時(shí)遇到問(wèn)題,以下是在Windows11上管理亮度的所有方法。如何在Windows11上變更亮度[10種方式解釋]單一顯示器使用者可以使用下列方法在Windows11上調(diào)整亮度。這包括使用單一顯示器的桌上型電腦系統(tǒng)以及筆記型電腦。讓我們開(kāi)始吧。方法1:使用操作中心操作中心是訪問(wèn)

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

在Windows11上的顯示縮放方面,我們都有不同的偏好。有些人喜歡大圖標(biāo),有些人喜歡小圖標(biāo)。但是,我們都同意擁有正確的縮放比例很重要。字體縮放不良或圖像過(guò)度縮放可能是工作時(shí)真正的生產(chǎn)力殺手,因此您需要知道如何自訂以充分利用系統(tǒng)功能。自訂縮放的優(yōu)點(diǎn):對(duì)於難以閱讀螢?zāi)簧系奈淖值娜藖?lái)說(shuō),這是一個(gè)有用的功能。它可以幫助您一次在螢?zāi)簧喜榭锤鄡?nèi)容。您可以建立僅適用於某些監(jiān)視器和應(yīng)用程式的自訂擴(kuò)充功能設(shè)定檔。可以幫助提高低階硬體的效能。它使您可以更好地控制螢?zāi)簧系膬?nèi)容。如何在Windows11

如何修復(fù)Windows伺服器中的啟動(dòng)錯(cuò)誤代碼0xc004f069 如何修復(fù)Windows伺服器中的啟動(dòng)錯(cuò)誤代碼0xc004f069 Jul 22, 2023 am 09:49 AM

Windows上的啟動(dòng)過(guò)程有時(shí)會(huì)突然轉(zhuǎn)向顯示包含此錯(cuò)誤代碼0xc004f069的錯(cuò)誤訊息。雖然啟動(dòng)程序已經(jīng)聯(lián)機(jī),但一些運(yùn)行WindowsServer的舊系統(tǒng)可能會(huì)遇到此問(wèn)題。透過(guò)這些初步檢查,如果這些檢查不能幫助您啟動(dòng)系統(tǒng),請(qǐng)?zhí)街饕鉀Q方案以解決問(wèn)題。解決方法–關(guān)閉錯(cuò)誤訊息和啟動(dòng)視窗。然後,重新啟動(dòng)電腦。再次從頭開(kāi)始重試Windows啟動(dòng)程序。修復(fù)1–從終端啟動(dòng)從cmd終端啟動(dòng)WindowsServerEdition系統(tǒng)。階段–1檢查Windows伺服器版本您必須檢查您使用的是哪種類(lèi)型的W

See all articles