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 相关文章推荐
PHP中显示格式化的用户输入
Oct 09 PHP
如何使用脚本模仿登陆过程
Nov 22 PHP
PHP仿盗链代码
Jun 03 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
php使用ob_start()实现图片存入变量的方法
Nov 14 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
Jan 20 PHP
PHP利用APC模块实现大文件上传进度条的方法
Oct 29 PHP
PHP简单日历实现方法
Jul 20 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 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实现在服务器上创建目录的方法
2015/03/16 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP生成plist数据的方法
2015/06/16 PHP
PHP5.3新特性小结
2016/02/14 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
vue项目中openlayers绘制行政区划
2020/12/24 Vue.js
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
python读取注册表中值的方法
2013/04/08 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
对Python3中的input函数详解
2018/04/22 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Django rest framework分页接口实现原理解析
2020/08/21 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
质检的岗位职责
2013/11/17 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
毕业典礼邀请函
2015/01/31 职场文书
三潭印月的导游词
2015/02/12 职场文书
学期个人工作总结
2015/02/13 职场文书