PHP

PHP之错误日志

智言 2015年08月19日 阅读(4745) 1

之前写了两篇文章分别是《PHP之自定义错误处理器》和《PHP之自定义错误触发器》,那么这些错误也仅仅是当我们之行的时候才能看的到,而如果工程师或者其他协助的同事需要查看发生错误的详细信息和时间点之类的可能就不是那么容易了,而且也不是那么的具体了,所以此时我们就可以用到错误日志,当然,这个错误日志就是将你发生错误的信息记录到某个地方或者是发送到某个地方,这样就可以便于问题的及时发现或者是后续的大数据分析等等都是可以的,而我们需要记录下错误就需要用到error_log()这个函数了。

首先,在W3School中定义为,默认地,根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。当然,通过电子邮件向您自己发送错误消息,是一种获得指定错误的通知的好办法,而今天我们分享的是将错误信息保存到本地即可。

首先定义一段之前写好的错误信息函数如下:

<?php

function my_error($errno,$errmsg){
    echo "错误号:".$errno."--";
    echo "错误信息:".$errmsg;
}
set_error_handler("my_error",E_USER_WARNING);
$page = 100;
if ($page<200) {
    //调用触发器
    trigger_error("你输入的页数过大",E_USER_WARNING);
    exit();
}

?>

那么当之行上面的页面后,会显示错误信息,那么接下来继续在里面添加错误日志error_log()函数来收集到我们本地的一个abc.txt文件中,这样我们就可以收集到所有的错误日志,以便后续进行排查。

那么首先介绍一下error_log()函数,官方给出的定义是如下:

bool error_log( string $message  [, int $message_type  = 0  [, string $destination  [, string $extra_headers]]])

message:应该被记录的错误信息。

message_type:设置错误应该发送到何处。(默认是0,建议设置为3)

  • 0:message 发送到 PHP 的系统日志,使用 操作系统的日志机制或者一个文件,取决于 error_log 指令设置了什么。 这是个默认的选项。
  • 1:message 发送到参数 destination 设置的邮件地址。 第四个参数 extra_headers 只有在这个类型里才会被用到。
  • 2:不再是一个选项。
  • 3:message 被发送到位置为 destination 的文件里。 字符 message 不会默认被当做新的一行。
  • 4:message 直接发送到 SAPI 的日志处理程序中。

destination:目标。它的含义描述于以上,由 message_type 参数所决定。

extra_headers:额外的头。当 message_type 设置为 1 的时候使用。 该信息类型使用了 mail() 的同一个内置函数。

所以在看完上面的官方最新文档解释后,我们可以在函数中加入错误日志函数error_log()来进行错误信息的收集或者是发送,这里仅演示收集信息到txt文件后存放于本地目录即可,如下:

<?php
function my_error($errno,$errmsg){
    $errorinfo ="错误号:".$errno."--错误信息:".$errmsg.";rn";
    echo $errorinfo;
    error_log($errorinfo,3,"abc.txt");
}
set_error_handler("my_error",E_USER_WARNING);
$page = 100;
if ($page<200) {
    //调用触发器
    trigger_error("你输入的页数过大",E_USER_WARNING);
    exit();
}
?>

那么我们会在之行页面的相同文件夹下发现一个abc.txt文件,并且里面就会记录下相关的错误信息日志,这样我们在后续工作中可以查看和分析处理。

另外,还可以加上一些时间记录来达到更准确的定位错误的时间点,如下:

<?php
function my_error($errno,$errmsg){
 //设置时区
 date_default_timezone_set("Asia/Chongqing");
 $errorinfo =date("Y-m-d G:i:s")."错误号:".$errno."--错误信息:".$errmsg.";rn";
 echo $errorinfo;
 error_log($errorinfo,3,"abc.txt");
}
set_error_handler("my_error",E_USER_WARNING);
$page = 100;
if ($page<200) {
 //调用触发器
 trigger_error("你输入的页数过大",E_USER_WARNING);
 exit();
}
?>

这样我们就可以完成错误日志的记录了,当然,你还可以通过email来进行发送后者其他方式,只要你想到了就干净动手写出来分享吧。

智言

业务开发请联系QQ:5679361

评论 1

评论前必须登录!

 

  1. [了不起爱]

    11年前 (2015-10-05) 回复


如果你觉得本站内容对你有所帮助,比如提升你对编程方面的认识,你可以通过上面的二维码请博主喝杯咖啡,安好。

WEB前端开发部落(公众号:webapp_club)

群列表

前端初级学习群:初级Web前端学习群(后期为支付入群)
PHP初级学习群:PHP(MySQL)学习交流群
QQ群仅作为相关领域讨论平台,均提供高质量问题交流,禁止闲聊,无法接受的朋友请勿加群!
进群需要通过这里获取进群码才能进群哦!

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏