PHP 错误与异常的日志记录-php教程

资源魔 15 0
提到 Nginx + PHP 效劳的谬误日记,咱们通常能想到的有 Nginx 的 access 日记、error 日记和 PHP 的 error 日记。尽管看起来是个很简略的成绩,但外面其实又牵扯到使用设置装备摆设和日记记载地位的成绩,假如是正在 ubuntu 等零碎下应用 apt-get 的形式来装置,其自有一套较为正当的的设置装备摆设文件可用。再者运转的使用顺序中的设置装备摆设也会影响到日记记载的形式及内容。

谬误与异样的区分

对于谬误与异样,咱们能够用一个简略的例子来了解:

<?php
try {
    1 / 0;
} catch (Exception $e) {
    echo "catched", PHP_EOL;
}

执行这个小示例会间接失去一个『PHP Warning: Division by zero …』谬误。缘由很简略:这是逻辑谬误,并非异样,以是不克不及被 try 捕捉。一样,关于变量应用前不决义这类成绩,也是一样的会孕育发生 warning 而没有是被捕捉。

然而这个成绩正在 PHP7 中却有了一些改动,比方下面的例子中我把 / 改为 %,正在 PHP7 的环境中执行会失去一个纷歧样的提醒:

PHP Fatal error: Uncaught DivisionByZeroError ...

依据这个提醒,假如我把 catch 中的前提修正一下:

<?php
try {
    1 / 0;
} catch (DivisionByZeroError $e) {
    echo "catched", PHP_EOL;
}

这样就能够失常捕捉到谬误并输入 catched 了。

关于第一个示例,一样假如把 Excepiton 修正为 ErrorException 也能够失常捕捉。

至于为何求余以及除了法,正在 PHP5 中提醒分歧而正在 PHP7(我的测试环境是 7.0.4) 中除了法没有属于 DivisionByZeroError 的成绩,这应该是个 BUG。

日记的记载

PHP 自身可设置装备摆设的 log 大略有如下几个:

● php-fpm error log(php-fpm.conf 中设置装备摆设,记载 php-fpm 过程的启动以及终止等信息)

● php-fpm slow log(也是正在 php-fpm.conf 中设置装备摆设,记载慢执行)

● php error log(php.ini 中设置装备摆设,记载使用顺序的谬误日记)

别的 Nginx 另有两个可设置装备摆设的log:access 以及 error log。这几个日记文件的性能没有同,记载的内容也没有同。但此中有一个点需求留意:假如设置装备摆设了 php-fpm 中的 error log 地位,但日记地位不成写(设置装备摆设时地位患上是对的,由于 php-fpm 启动时会做反省),正在适当的设置装备摆设前提下谬误日记会被前往到 cgi 中从而写入 nginx 的 error log 中。

以是遇到成绩是咱们普通的查找思绪都是:

1.到 Nginx access log 中查看申请的状态码

2.查看 php error log 中的谬误记载和 stack 信息

3.查看 php-fpm log 中有没有异样重启记载(假如外围或许扩大成绩,会呈现此状况)

然而正在以上几种状况下你也会发现,这外面并无上文提到的顺序抛出异样的日记记载。

异样记载

异样没有同于谬误,严格上说它是使用顺序逻辑的异样而没有是谬误,是能够经过正当的顺序逻辑来手动触发的。但年夜多状况下异样也是要进行记载的,比方数据库无奈衔接或许框架的不妥应用触发的异样,咱们需求经过日记来定位成绩并实时解决。

PHP 提供了两个函数用于自界说解决谬误以及异样的办法:

● set_error_handler

● set_exception_handler

以是能够经过 set_exception_handler 函数注入办法捕捉一切的异样并记载 。

monolog 是一个优秀的异样记载的库,也是基于 PSR-3 规范的完成。Laravel、Symfony 中默许也是应用它来记载异样。若有需求,也能够思考正在本人的名目中引入。

以上就是PHP 谬误与异样的日记记载的具体内容,更多请存眷资源魔其它相干文章!

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

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