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 heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
记录PHP错误日志 display_errors与log_errors的区别
Oct 09 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
Apr 04 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
PHP中递归的实现实例详解
Nov 14 PHP
浅析PHP7的多进程及实例源码
Apr 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 程序员的调试技术小结
2009/11/15 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
解决vue单页路由跳转后scrollTop的问题
2018/09/03 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
Python如何读取MySQL数据库表数据
2017/03/11 Python
python实现BackPropagation算法
2017/12/14 Python
Python函数装饰器原理与用法详解
2019/08/16 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
自考生自我鉴定范文
2013/10/01 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
安全责任书范本
2014/04/15 职场文书
平安校园建设方案
2014/05/02 职场文书
个人授权委托书
2014/09/15 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
小时代观后感
2015/06/10 职场文书
2016国培研修心得体会
2016/01/08 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书