关于PHP框架中日志系统的详解-php教程

资源魔 33 0
引言

接触过php框架的冤家们可能都晓得,日记正在名目中的首要作用了,他能够协助咱们定位谬误的地位,让顺序更敌对(解决切当的话没有会间接抛出一年夜堆只有顺序猿才真正动的英文),调试的时分也会很不便,还能够记载一些首要的操作等等,总之一个完好的名目要是没了日记零碎,就曾经开发的路上布满了荆棘、坑洼,一定会磕磕绊绊的。

简介

要把握PHP日记零碎,必需先对这几点货色理解透辟。

1、php的几个函数

set_exception_handler(callback $exception_handler); //异样捕捉自界说解决函数注册 
set_error_handler(callback $error_handler); //谬误捕捉自界说解决函数注册 
register_shutdown_function(callback $callback); //顺序执行时异样终止谬误捕捉解决函数注册

这三个函数正在谬误解决管制中给开发者提供了很年夜的自立空间,正在日记零碎中记载日记信息有他们的功绩。

正在顺序中呈现异样(exception)成绩时,php内核会抛出异样谬误,而后将谬误信息打印给应用者,假如注册了exception解决函数,php抛出的异样会转给自界说的注册的异样捕捉函数,这个函数外面蕴含了咱们要做的解决,记载谬误信息(包罗谬误具体内容、谬误地位),该函数解决完异样后,异样就会终止。

当顺序中呈现error时,咱们注册的error解决函数会正在函数中将谬误信息转化为一个谬误异样工具通报给异样解决函数,也就是第一步的$exception_handler函数。

当成续重呈现shutdown谬误时,会执行咱们注册的异样终止解决函数,该函数经过error_get_last()猎取到最初的shutdown时的谬误工具,接着以及上一部同样,天生一个error exception工具,将该工具通报给咱们注册的异样解决函数。

能够看到,并不管是异样仍是谬误,都是将本人的信息转化为异样解决函数意识的异样信息,而后交给异样解决函数解决,非异样信息就像化了妆的女人同样,异样解决顺序没有意识这些非异样信息,只有将装卸掉(非异样信息本人转化为异样信息,精确的说应该是抛出),异样解决才意识。

03b0f67cbbf8f62c3b9f8503bc01e3d.png

php日记零碎中的谬误解决流程

那末如今成绩来了,这几个函数普通会合营一个异样解决类库,加之一个谬误日记记载类库来进行工作,异样解决类库中蕴含要注册的3个函数,日记记载类库正在$exception_handler中挪用,用来正当的记载以及搁置日记文件的地位,下面说到的几个函数普通是正在顺序框架入口处进行加载注册的,就像上面这样:

这外面用的是array(class,function)这类形式。

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

2、日记记载相干类库

第一局部引见到的货色只是对异样、谬误、shutdown进行了捕捉,这只是第一步,接上去还要对捕捉到的信息进行正当的解决,比方说记载这些日记信息到内陆文件零碎中(这个操作是正在array(“Myexception”,”exceptionHandler”)),这个中央就用到了日记记载类库。(上面要说的类库是自创了kohana日记零碎的设计)。

日式日记记载也很简略只需做的将信息增加到文件末尾就行,这个很容易完成,置信各人均可以本人完成,然而要设计出一个便捷的、高效的、扩大的日记记载类库就没有那末简略了,要通过长期的理论总结优化才能够,kohana框架中的日记记载类库曾经比拟成熟了,因而这里拿来自创。

置信应用过kohana的用户肯定对kohana框架中的日记记载比拟相熟,没有相熟也不妨事,我上面会大略的说说,正在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中,日记记载工具分为两局部,第一局部就是日记工具,用来保护一个日记记载工具的列表,这个要怎样了解呢,其实就像一个容器,外面蕴含了一个或多个日记记载工具(这个就是第二局部,这些日记记载工具才是真正来记载日记的),另有每一个工具要记载的谬误等级的数组,当餍足谬误等级的时分才会去记载,没有餍足就会略掉。上面是我本人简化重定名后的日记记载形式:

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小的谬误(谬误级别比他高),并按规定记载正在文件夹./data/debug上面,第二个是记载级别等于或高于Log::NOTICE的谬误,当然了你还能够更具体制订详细哪些谬误好,通报数组就好了,这个就是我觉得不便、快捷之处,咱们能够依据需要来增加谬误日记、分没有同的日记目次,上面看一幅图兴许会有助于了解:

81fe41657b89160bf2c22c6ef8c6f9f.png

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的执行孕育发生带年夜的影响。

保举:《PHP培训》

以上就是对于PHP框架中日记零碎的详解的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!