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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
php 删除数组元素
Jan 16 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
Apr 02 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
微信API接口大全
Apr 15 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
详解YII关联查询
Jan 10 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 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数组应该有多大的分析
2009/07/30 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
jQuery 操作XML入门
2008/12/25 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
Python Deque 模块使用详解
2014/07/04 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
python交互界面的退出方法
2019/02/16 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
基于matplotlib xticks用法详解
2020/04/16 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
2020/05/22 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
高中校园广播稿
2014/01/11 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
派出所所长先进事迹
2014/05/19 职场文书
论文诚信承诺书
2014/05/23 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
区域销售大会开幕词
2016/03/04 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
Apache自带的ab压力测试工具的实现
2022/07/23 Servers