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 反向排序和随机排序代码
Jun 30 PHP
PHP页面中文乱码分析
Oct 29 PHP
php发送post请求函数分享
Mar 06 PHP
跟我学Laravel之路由
Oct 15 PHP
php输入数据统一类实例
Feb 23 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
Smarty保留变量用法分析
May 23 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
Apr 03 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php实现微信分享朋友链接功能
Feb 18 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
Yii 框架入口脚本示例分析
May 19 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导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
Javascript函数的参数
2015/07/16 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python列表操作使用示例分享
2014/02/21 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python实现支付宝转账接口
2019/05/07 Python
Python中base64与xml取值结合问题
2019/12/22 Python
Python实现对adb命令封装
2020/03/06 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
实习生求职自荐信
2014/02/07 职场文书
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
党支部创先争优活动总结
2014/08/28 职场文书
单位租房协议书范本
2014/12/04 职场文书
爱国主义影片观后感
2015/06/18 职场文书
使用Ajax实现无刷新上传文件
2022/04/12 Javascript