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分页时出现的Fatal error的解决方法
Apr 18 PHP
如何用php获取程序执行的时间
Jun 09 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
PHP7.0版本备注
Jul 23 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
Laravel实现表单提交
May 07 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 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
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
jQuery Validate插件实现表单强大的验证功能
2015/12/18 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
浅谈Vue.js
2017/03/02 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
python开发中range()函数用法实例分析
2015/11/12 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
CSS3实现swap交换动画
2016/01/19 HTML / CSS
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
岗位竞聘演讲稿
2014/01/10 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
科技活动周标语
2014/10/08 职场文书
捐资助学感谢信
2015/01/21 职场文书
田径运动会通讯稿
2015/07/18 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js