php 自定义错误日志实例详解


Posted in PHP onNovember 12, 2016

php 自定义错误日志

 项目中需要对定义错误日志及时处理, 那么就需要修改自定义错误日志的输出方式(写日志、发邮件、发短信)

  一. register_shutdown_function(array('phperror','shutdown_function')); //定义PHP程序执行完成后执行的函数

函数可实现当程序执行完成后执行的函数,其功能为可实现程序执行完成的后续操作。程序在运行的时候可能存在执行超时,或强制关闭等情况,但这种情况下默认的提示是非常不友好的,如果使用register_shutdown_function()函数捕获异常,就能提供更加友

好的错误展示方式,同时可以实现一些功能的后续操作,如执行完成后的临时数据清理,包括临时文件等。

 可以这样理解调用条件:

1、当页面被用户强制停止时

2、当程序代码运行超时时

3、当PHP代码执行完成时,代码执行存在异常和错误、警告

  二. set_error_handler(array('phperror','error_handler')); // 设置一个用户定义的错误处理函数

通过 set_error_handler() 函数设置用户自定义的错误处理程序,然后触发错误(通过 trigger_error()):

 三. set_exception_handler(array('phperror','appException')); //自定义异常处理

定义异常抛出的数据格式。

class phperror{
  
  //自定义错误输出方法
  public static function error_handler($errno, $errstr, $errfile, $errline){
    $errtype = self::parse_errortype($errno);
    $ip = $_SERVER['REMOTE_ADDR'];//这里简单的获取客户端IP
    //错误提示格式自定义
    $msg = date('Y-m-d H:i:s')." [$ip] [$errno] [-] [$errtype] [application] {$errstr} in {$errfile}:{$errline}";
    //自定义日志文件的路径
    $logPath = 'logs/app.log';
    //写操作,注意文件大小等控制
    file_put_contents($logPath, $msg, FILE_APPEND);
  }

  //系统运行中的错误输出方法
  public static function shutdown_function(){
    $lasterror = error_get_last();//shutdown只能抓到最后的错误,trace无法获取
    $errtype = self::parse_errortype($lasterror['type']);
    $ip = $_SERVER['REMOTE_ADDR'];//这里简单的获取客户端IP
    //错误提示格式自定义
    $msg = date('Y-m-d H:i:s')." [$ip] [{$lasterror['type']}] [-] [$errtype] [application] {$lasterror['message']} in {$file}:{$lasterror['line']}";
    //自定义日志文件的路径
    $logPath = 'logs/app.log';
    //写操作,注意文件大小等控制
    file_put_contents($logPath, $msg,FILE_APPEND);
  }

 //自定义异常输出

  public static function appException($exception) { 
 echo " exception: " , $exception->getMessage(), "/n"; 
  } 
  private static function parse_errortype($type){
    switch($type){
      case E_ERROR: // 1 
        return 'Fatal Error';
      case E_WARNING: // 2 
        return 'Warning';
      case E_PARSE: // 4 
        return 'Parse error';
      case E_NOTICE: // 8 
        return 'Notice';
      case E_CORE_ERROR: // 16 
        return 'Core error';
      case E_CORE_WARNING: // 32 
        return 'Core warning';
      case E_COMPILE_ERROR: // 64 
        return 'Compile error';
      case E_COMPILE_WARNING: // 128 
        return 'Compile warning';
      case E_USER_ERROR: // 256 
        return 'User error';
      case E_USER_WARNING: // 512 
        return 'User warning';
      case E_USER_NOTICE: // 1024 
        return 'User notice';
      case E_STRICT: // 2048 //
        return 'Strict Notice';
      case E_RECOVERABLE_ERROR: // 4096 
        return 'Recoverable Error';
      case E_DEPRECATED: // 8192 
        return 'Deprecated';
      case E_USER_DEPRECATED: // 16384 
        return 'User deprecated';
    }
    return $type;
  }
  
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php模拟post上传图片实现代码
Jun 24 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 #PHP
php array_values 返回数组的所有值详解及实例
Nov 12 #PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 #PHP
PHP上传图片、删除图片简单实例
Nov 12 #PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 #PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 #PHP
thinkPHP多语言切换设置方法详解
Nov 11 #PHP
You might like
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
Flash+XML滚动新闻代码 无图片 附源码下载
2007/11/22 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[48:48]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python中asyncore的用法实例
2014/09/29 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
年度考核评语
2014/01/19 职场文书
《长相思》听课反思
2014/04/10 职场文书
英语专业自荐书
2014/06/13 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
安全先进个人材料
2014/12/29 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android