PHP调试函数和日志记录函数分享


Posted in PHP onJanuary 31, 2015

网站程序开发过程经常需要调试,发布阶段也需要记录运行日志,方便发现问题和还原事件。这就要求有调试和日志记录功能。

下面分别写了用于调试的函数和用于记录错误的函数。

使用方法很简单,且自动根据日期生成日志文件:

//调试时,多个参数都可以:

sysdebug("hello");

sysdebug("hello", "tiger is coming now");
//错误记录也一样:

syserror("error");

syserror("error", "unfortunately tiger is dead ", "we are sad");

php调试和日志记录函数,如下:

/** 

 * 记录调试信息 

 */  

function sysdebug($msg) {  

  if (defined("DEBUG_MODE")) {  

    //TODO 检测调试开关,发布时不打印  

    $params = func_get_args();  

    $traces = debug_backtrace();  

    $trace = array_pop($traces);  

    sysrecord($params, $trace, 'debug');  

  }  

}  

  

/** 

 * 记录错误信息 

 */  

function syserror($msg) {  

  $params = func_get_args();  

  $traces = debug_backtrace();  

  $trace = array_pop($traces);  

  sysrecord($params, $trace, 'error');  

}  

  

/** 

 * 写文件 

 * @ignore 

 */  

function sysfile($filename, $msg, $mode = null) {  

  $path = dirname($filename);  

  if (!file_exists($path)) {  

    mkdir($path, 0666, true);  

  }  

  $flag = LOCK_EX;  

  if ($mode) {  

    switch ($mode) {  

      case "add":  

        $flag = FILE_APPEND | LOCK_EX;  

        break;  

      case "a":  

        $flag = FILE_APPEND | LOCK_EX;  

        break;  

      default:  

        break;  

    }  

  }  

  file_put_contents($filename, $msg, $flag);  

}  

  

/** 

 * 记录信息 

 * @ignore 

 */  

function sysrecord($params, $trace, $level) {  

  $path = dirname(__FILE__) . "/logs/";  

  //TODO 日志保存目录最好修改一下  

    

  $file = $trace['file'];  

  $func = $trace['function'];  

  if ($func == "sys$level") {  

    $func = '';  

  }  

  $filename = $path . "$level/" . date("Y-m-d") . '.log';  

  $msg = "[" . date("m-d H:i:s") . "] File:\"" . basename($file) . "\" Func:\"" . $func . "\" Msg:" . json_encode($params) . "\r\n";  

  sysfile($filename, $msg, 'add');  

} 
PHP 相关文章推荐
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
PHP基础知识回顾
Aug 16 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
php使用递归计算文件夹大小
Dec 24 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
Jul 21 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
php上传文件问题汇总
Jan 30 #PHP
PHP文件缓存类示例分享
Jan 30 #PHP
php递归删除目录与文件的方法
Jan 30 #PHP
php递归法读取目录及文件的方法
Jan 30 #PHP
php实现简单文件下载的方法
Jan 30 #PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 #PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 #PHP
You might like
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JS+CSS实现带关闭按钮DIV弹出窗口的方法
2015/02/27 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python基础教程之常用运算符
2014/08/29 Python
Python装饰器用法示例小结
2018/02/11 Python
python表格存取的方法
2018/03/07 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
巴西世界杯32强口号
2014/06/05 职场文书
课外科技活动总结
2014/08/27 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
2016年少先队活动总结
2016/04/06 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python
关于MySQL中的 like操作符详情
2021/11/17 MySQL
四十九个javascript小知识实用技巧
2021/11/20 Javascript