目錄
PHP框架中的日志系统,PHP框架日志系统
引言
简介
一、php的几个函数
二、日志记录相关类库
首頁 後端開發 php教程 PHP框架中的日志系统,PHP框架日志系统_PHP教程

PHP框架中的日志系统,PHP框架日志系统_PHP教程

Jul 13, 2016 am 10:11 AM
php

PHP框架中的日志系统,PHP框架日志系统

 

 现在在一家公司做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框架中的日志系统,PHP框架日志系统_PHP教程php日志系统中的错误处理流程

    那么现在问题来了,这几个函数一般会配合一个异常处理类库,加上一个错误日志记录类库来进行工作,异常处理类库中包含要注册的3个函数,日志记录类库在$exception_handler中调用,用来合理的记录和放置日志文件的位置,上面说到的几个函数一般是在程序框架入口处进行加载注册的,就像下面这样:

这里面用的是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进行了捕获,这只是第一步,接下来还要对捕获到的信息进行合理的处理,比如说记录这些日志信息到本地文件系统中(这个操作是在array("Myexception","exceptionHandler")),这个地方就用到了日志记录类库。(下面要说的类库是借鉴了kohana日志系统的设计)。

日式日志记录也很简单只要做的将信息添加到文件末尾就行,这个很容易实现,相信大家都可以自己实现,但是要设计出一个便捷的、高效的、扩展的日志记录类库就不那么简单了,要经过长时间的实践总结优化才可以,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中,日志记录对象分为两部分,第一部分就是日志对象,用来维护一个日志记录对象的列表,这个要怎么理解呢,其实就像一个容器,里面包含了一个或多个日志记录对象(这个就是第二部分,这些日志记录对象才是真正来记录日志的),还有每个对象要记录的错误等级的数组,当满足错误等级的时候才会去记录,不满足就会略掉。下面是我自己简化重命名后的日志记录方式:

<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小的错误(错误级别比他高),并按规则记录在文件夹./data/debug下面,第二个是记录级别等于或高于Log::NOTICE的错误,当然了你还可以更详细制定具体哪些错误好,传递数组就行了,这个就是我感觉方便、快捷的地方,我们可以根据需求来添加错误日志、分不同的日志目录,下面看一幅图也许会有助于理解:

PHP框架中的日志系统,PHP框架日志系统_PHP教程三、实例总结

    到这里你应该已经了解了日志系统的大概了,已经可以自己编写一个”日志系统”来使用了,下面看看我的”日志系统“的例子,这是github地址,里面有代码和例子,需要的话可以看看。

https://github.com/AizuYan/phplog.gitPHP框架中的日志系统,PHP框架日志系统_PHP教程本文版权归作者(luluyrt@163.com)和博客园共有,未经作者本人同意禁止任何形式的转载,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/927207.htmlTechArticlePHP框架中的日志系统,PHP框架日志系统 现在在一家公司做PHP后台开发程序猿(我们组没有前端,做活动时会做前端的东西),刚开始到公司...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

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整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

See all articles