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

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

引言

??? 接觸過php框架的朋友們可能都知道,日志在項(xiàng)目中的重要作用了,他可以幫助我們定位錯(cuò)誤的位置,讓程序更友好(處理得當(dāng)?shù)脑挷粫?huì)直接拋出一大堆只有程序猿才真正動(dòng)的英文),調(diào)試的時(shí)候也會(huì)很方便,還可以記錄一些重要的操作等等,總之一個(gè)完整的項(xiàng)目要是沒了日志系統(tǒng),就已經(jīng)開發(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); //程序執(zhí)行時(shí)異常終止錯(cuò)誤捕獲處理函數(shù)注冊(cè)?

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

??? 在程序中出現(xiàn)異常(exception)問題時(shí),php內(nèi)核會(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è)的error處理函數(shù)會(huì)在函數(shù)中將錯(cuò)誤信息轉(zhuǎn)化為一個(gè)錯(cuò)誤異常對(duì)象傳遞給異常處理函數(shù),也就是第一步的$exception_handler函數(shù)。

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

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

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

??? 那么現(xiàn)在問題來了,這幾個(gè)函數(shù)一般會(huì)配合一個(gè)異常處理類庫(kù),加上一個(gè)錯(cuò)誤日志記錄類庫(kù)來進(jìn)行工作,異常處理類庫(kù)中包含要注冊(cè)的3個(gè)函數(shù),日志記錄類庫(kù)在$exception_handler中調(diào)用,用來合理的記錄和放置日志文件的位置,上面說到的幾個(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)類庫(kù)

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

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

??? 相信使用過kohana的用戶一定對(duì)kohana框架中的日志記錄比較熟悉,不熟悉也沒關(guān)系,我下面會(huì)大概的說說,在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è)日志記錄對(duì)象日志對(duì)象中,注意橄欖色打底的倆個(gè),他們是不同的類庫(kù)實(shí)例,在kohana中,日志記錄對(duì)象分為兩部分,第一部分就是日志對(duì)象,用來維護(hù)一個(gè)日志記錄對(duì)象的列表,這個(gè)要怎么理解呢,其實(shí)就像一個(gè)容器,里面包含了一個(gè)或多個(gè)日志記錄對(duì)象(這個(gè)就是第二部分,這些日志記錄對(duì)象才是真正來記錄日志的),還有每個(gè)對(duì)象要記錄的錯(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,可以看到我在程序入口處很容易的添加了兩不同的日志種類,第一個(gè)是記錄所有錯(cuò)誤號(hào)比Log::DEBUG小的錯(cuò)誤(錯(cuò)誤級(jí)別比他高),并按規(guī)則記錄在文件夾./data/debug下面,第二個(gè)是記錄級(jí)別等于或高于Log::NOTICE的錯(cuò)誤,當(dāng)然了你還可以更詳細(xì)制定具體哪些錯(cuò)誤好,傳遞數(shù)組就行了,這個(gè)就是我感覺方便、快捷的地方,我們可以根據(jù)需求來添加錯(cuò)誤日志、分不同的日志目錄,下面看一幅圖也許會(huì)有助于理解:

????????????????????????????????????????????????????????????????????????????????????????????????????? log與logwriter的關(guān)系

??? 通過上面的圖你就會(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ì)調(diào)用添加一條錯(cuò)誤信息(包括錯(cuò)誤位置、錯(cuò)誤代號(hào)、錯(cuò)誤信息等信息)到Log容器中的errormessage數(shù)組中,然后當(dāng)程序結(jié)束之后在將這些信息寫入文件,這里還要注意下,也許你在閱讀kohana代碼是發(fā)現(xiàn)沒有明顯的直接寫入到日志中去,這里面kohana優(yōu)化的比較好,因?yàn)閜hp的一次執(zhí)行可能出現(xiàn)多個(gè)錯(cuò)誤,如果來一個(gè)錯(cuò)誤你就去記錄一次這樣會(huì)在程序返回之前占用多余的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)可以自己編寫一個(gè)”日志系統(tǒng)”來使用了,下面看看我的”日志系統(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教程有興趣的朋友有所幫助。

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
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é),例如窗口邊框。在本指南中,我們將討論分步說明,以幫助您在Windows操作系統(tǒng)中創(chuàng)建反映您的風(fēng)格的環(huán)境。如何更改窗口邊框設(shè)置?按+打開“設(shè)置”應(yīng)用。WindowsI轉(zhuǎn)到個(gè)性化,然后單擊顏色設(shè)置。顏色更改窗口邊框設(shè)置窗口11“寬度=”643“高度=”500“&gt;找到在標(biāo)題欄和窗口邊框上顯示強(qiáng)調(diào)色選項(xiàng),然后切換它旁邊的開關(guān)。若要在“開始”菜單和任務(wù)欄上顯示主題色,請(qǐng)打開“在開始”菜單和任務(wù)欄上顯示主題

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

“你的組織要求你更改PIN消息”將顯示在登錄屏幕上。當(dāng)在使用基于組織的帳戶設(shè)置的電腦上達(dá)到PIN過期限制時(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)系域管理員會(huì)有所幫助!此外,配置錯(cuò)誤的本地策略設(shè)置或不正確的注冊(cè)表項(xiàng)也可能導(dǎo)致錯(cuò)誤。即

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

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

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

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

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

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

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

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

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

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

如何修復(fù)Windows服務(wù)器中的激活錯(cuò)誤代碼0xc004f069 如何修復(fù)Windows服務(wù)器中的激活錯(cuò)誤代碼0xc004f069 Jul 22, 2023 am 09:49 AM

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

See all articles