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 相关文章推荐
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php计算整个目录大小的方法
Jun 19 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
Yii2单元测试用法示例
2016/11/12 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
js传值 判断
2006/10/26 Javascript
jQuery学习笔记之jQuery的动画
2010/12/22 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
2018/12/05 jQuery
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python中字符串的格式化方法小结
2016/05/03 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
python机器学习之随机森林(七)
2018/03/26 Python
pymysql的简单封装代码实例
2020/01/08 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
2020/08/17 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
保证书范文大全
2014/04/28 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
自主招生英文自荐信
2015/03/25 职场文书
婚宴新郎致辞
2015/07/28 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers