亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP框架中的日志系統

2020-03-22 17:43:43
字體:
來源:轉載
供稿:網友
  •  

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

    引言

    接觸過php框架的朋友們可能都知道,日志在項目中的重要作用了,他可以幫助我們定位錯誤的位置,讓程序更友好(處理得當的話不會直接拋出一大堆只有程序猿才真正動的英文),調試的時候也會很方便,還可以記錄一些重要的操作等等,總之一個完整的項目要是沒了日志系統,就已經開發的路上布滿了荊棘、坑洼,肯定會磕磕絆絆的。

    簡介

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

    一、php的幾個函數

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

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

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

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

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

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

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

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

    php日志系統中的錯誤處理流程

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

    這里面用的是array(html' target='_blank'>class,function)這種方式。

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

    二、日志記錄相關類庫

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

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

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

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

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

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

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

    log與logwriter的關系

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

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

    三、實例總結

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

    http://github.com/AizuYan/phplog.git2014-12-13_163228

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

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 上一篇:php和c哪個好

    下一篇:PHP筆記

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    国产一区二区三区在线| 亚洲性夜色噜噜噜7777| 神马久久桃色视频| 国产91精品最新在线播放| 亚洲精品成a人在线观看| 亚洲欧美精品一区| 91香蕉电影院| 日本a级片电影一区二区| 久热99视频在线观看| 亚洲第一网站男人都懂| 日韩欧美中文字幕在线播放| 久久综合伊人77777蜜臀| 精品国偷自产在线视频99| 日韩精品中文字幕久久臀| 91香蕉嫩草神马影院在线观看| 亚洲午夜久久久久久久| 国产99久久久欧美黑人| 日韩av网站大全| 成人久久久久久| 亚洲性无码av在线| 欧美影院久久久| 精品久久香蕉国产线看观看gif| 亚洲精品综合久久中文字幕| 亚洲女成人图区| 精品国产乱码久久久久酒店| 欧美激情精品久久久久久免费印度| 亚洲男人天堂古典| 在线观看精品国产视频| 亚洲理论片在线观看| 久青草国产97香蕉在线视频| 成人免费在线视频网站| 韩国视频理论视频久久| 欧美激情按摩在线| 欧美另类老女人| 97久久超碰福利国产精品…| 国产精品一区二区性色av| 欧美在线视频导航| 国产精品亚洲аv天堂网| 亚洲精品xxxx| 日韩电影第一页| 亚洲欧美在线磁力| 色综合视频网站| 亚洲人成电影网站色xx| 国产精品香蕉国产| 日本免费久久高清视频| 国产免费一区视频观看免费| 国产91九色视频| 国产色婷婷国产综合在线理论片a| 国产精品主播视频| 精品视频中文字幕| 亚洲一区二区三区sesese| 日韩欧美在线视频日韩欧美在线视频| 久久亚洲精品网站| 在线观看日韩专区| 精品自在线视频| 日韩国产精品亚洲а∨天堂免| 日韩在线播放视频| 国语自产在线不卡| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩精品视频在线| 亚洲精品国产精品久久清纯直播| 国产精品视频一区国模私拍| 一区二区欧美久久| 久久久久久尹人网香蕉| 国产精品久久久999| 欧美一级淫片videoshd| 欧美在线日韩在线| 亚洲第一页自拍| 久久天堂电影网| 国产综合香蕉五月婷在线| 日韩免费看的电影电视剧大全| 色偷偷噜噜噜亚洲男人| 欧美一级在线亚洲天堂| 欧美激情国产高清| 久久精品国产一区二区电影| 国产丝袜一区二区三区免费视频| 国产精品对白刺激| 国产一区二区精品丝袜| 国a精品视频大全| 国产精品高精视频免费| 久久久噜噜噜久久中文字免| 成人做爽爽免费视频| 日韩免费高清在线观看| 久久99热精品这里久久精品| 亚洲天堂视频在线观看| 国产午夜精品全部视频在线播放| 亚洲精品视频网上网址在线观看| 日韩电影中文字幕| 国产成人午夜视频网址| 国产精品小说在线| 国产成人97精品免费看片| 91精品国产高清久久久久久久久| 国产精品自产拍在线观看| 国内精品视频一区| 精品露脸国产偷人在视频| 欧美在线视频a| 日韩在线视频观看| 在线国产精品播放| 午夜精品视频网站| 亚洲人成在线免费观看| 黑人巨大精品欧美一区二区一视频| 国产视频久久久久久久| 亚洲国产精品免费| 久久国产加勒比精品无码| 国产精品永久免费视频| 国产91在线播放| 日韩电影中文字幕一区| 日韩国产高清污视频在线观看| 最新日韩中文字幕| 在线看国产精品| 欧美第一黄网免费网站| 在线成人免费网站| 久久久久久尹人网香蕉| 欧美在线一区二区三区四| 成人美女免费网站视频| 中文综合在线观看| 亚洲精品美女视频| 日本精品免费观看| 精品视频在线播放色网色视频| 久久久久这里只有精品| 97视频免费在线观看| 91精品在线看| 亚洲r级在线观看| 欧美激情极品视频| 中文字幕免费精品一区| 国产精品久久久久久av| 亚洲精品久久久久久久久久久久| 国产精品福利无圣光在线一区| 欧美日韩激情视频| 亚洲精品免费网站| 久久久久国产精品一区| 国产ts一区二区| 亚洲天堂男人天堂女人天堂| 日韩精品在线私人| 欧美日韩激情网| 久久久久久久久91| 欧美黑人巨大xxx极品| 国产精品精品一区二区三区午夜版| 国产精品亚洲网站| 欧美日韩一二三四五区| 久久精品国产精品| 欧美在线精品免播放器视频| 色yeye香蕉凹凸一区二区av| 久久手机免费视频| 亚洲香蕉成人av网站在线观看| 精品亚洲国产成av人片传媒| 国产精品夜色7777狼人| 777国产偷窥盗摄精品视频| 69av成年福利视频| 亚洲国产精品嫩草影院久久| 亚洲国产精品va| 欧美日韩美女在线观看| 国产欧美亚洲视频| 一本色道久久综合狠狠躁篇怎么玩| 91精品久久久久久久久久久久久| 尤物九九久久国产精品的特点| 欧美区二区三区| 日韩精品在线观看一区二区| 国产一区二区三区在线观看网站| 国产精品av免费在线观看| 亚洲美腿欧美激情另类| 中文字幕日韩在线视频| 中文字幕九色91在线| 亚洲视频欧美视频|