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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
php获取新浪微博数据API实例
Nov 12 PHP
百度实时推送api接口应用示例
Oct 21 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
Yii2实现log输出到file及database的方法
Nov 12 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
JS常用函数使用指南
2014/11/23 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
微信小程序个人中心的列表控件实现代码
2020/04/26 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
win与linux系统中python requests 安装
2016/12/04 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
Python排序函数的使用方法详解
2020/12/11 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
餐厅销售主管职责范本
2014/02/19 职场文书
《社戏》教学反思
2014/04/15 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
读群众路线的心得体会
2014/09/03 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
css3 选择器
2022/05/11 HTML / CSS