欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

全面解讀PHP框架的日志系統(tǒng)

今天小編分享的是關(guān)于PHP框架的日志系統(tǒng),可能大家對PHP框架并不陌生,或者從來沒有了解過PHP框架。但是不用擔(dān)心,今天小編會以最簡單的描述來講PHP框架的日志系統(tǒng)的原理。

創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元大峪做網(wǎng)站,已為上家服務(wù),為大峪各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

引言

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

簡介

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

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

set_exception_handler(callback $exception_handler); //異常捕獲自定義處理函數(shù)注冊 
set_error_handler(callback $error_handler); //錯誤捕獲自定義處理函數(shù)注冊 
register_shutdown_function(callback $callback); //程序執(zhí)行時異常終止錯誤捕獲處理函數(shù)注冊

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

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

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

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

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

全面解讀PHP框架的日志系統(tǒng)

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

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

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

set_exception_handler(array("Myexception","exceptionHandler"));
set_error_handler(array("Myexception","errorHandler"));
register_shutdown_function(array("Myexception","shutdownHandler"));

二、日志記錄相關(guān)類庫

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

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

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

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

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

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

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

全面解讀PHP框架的日志系統(tǒng)

log與logwriter的關(guān)系

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

這本分和第一部分怎么合作的呢?

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

關(guān)于全面解讀PHP框架的日志系統(tǒng)就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過小編可以保證其準(zhǔn)確性是絕對沒問題的。希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

網(wǎng)站標(biāo)題:全面解讀PHP框架的日志系統(tǒng)
文章來源:http://aaarwkj.com/article10/gpjogo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)站維護(hù)網(wǎng)站策劃、手機(jī)網(wǎng)站建設(shè)、用戶體驗定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
亚洲热久久国产经典视频| 亚洲 欧美 日韩一区| 精品国产一区二区av麻豆| 中文字幕一区二区三区不卡日日| 欧美日韩在线观看不卡视频| 中文字幕日韩欧美一区| 中文字幕在线一区国产精品| 亚洲蜜桃精品一区二区三区| 极品少妇一级人妻av| 中文字幕一区日韩欧美| 国产黄的网站在线观看| 午夜欧美激情在线视频| 美女被强到爽高潮不断在线| 国产日韩在线不卡网站| 一区二区三区四区四虎| 欧美一区二区三区精美| 白嫩少妇情久久密月久久| 国产精品视频一区二区久久| 日韩成人手机视频在线观看| 亚洲午夜天堂精品福利天堂| 久久精品国产普通话对白| 日韩免费中文视频不卡| 亚洲av成人噜噜网站| 亚洲午夜福利理论片在线| 国产精品女同久久久久久| 亚洲精品视频久久免费| 亚洲免费视频一二三区| av电影网站中文字幕| 国产欧美日韩在线高清| 亚洲激情欧美激情在线| 清纯美女爱爱高潮av| 日韩国产欧美一区二区在线视频| 人妻少妇av免费久久蜜臀| 国产传媒视频网站在线观看| 中文字幕精品一区二区三| 激情亚洲综合一区二区| 国产精品久久亚洲一区二区 | 一区二区三区乱码国产在线| 国产一级二级三级久久| 亚洲精品午夜福利网| 天堂av免费资源在线观看|