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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
php 获取本地IP代码
Jun 23 PHP
php读取文件内容到数组的方法
Mar 16 PHP
Yii CGridView用法实例详解
Jul 12 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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/09/16 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
Javascript 布尔型分析
2008/12/22 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
Ubuntu下安装PyV8
2016/03/13 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
详解Python 切片语法
2019/06/10 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
pytorch masked_fill报错的解决
2020/02/18 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
北大自主招生自荐信
2013/10/19 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
50岁生日感言
2014/01/23 职场文书
公司接待方案
2014/03/08 职场文书
计算机应用专业自荐信
2014/07/05 职场文书
综合实践活动报告
2015/02/05 职场文书
医生辞职信范文
2015/03/02 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
干部培训工作总结2015
2015/05/25 职场文书
公司年会主持词范文!
2019/05/07 职场文书