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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
php标签云的实现代码
Oct 10 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
phpcms手机内容页面添加上一篇和下一篇
Jun 05 PHP
PHP的命令行命令使用指南
Aug 18 PHP
php文件上传后端处理小技巧
May 22 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
php中namespace及use用法分析
Dec 06 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
PHP实现的多维数组去重操作示例
Jul 21 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中使用灵巧的体系结构
2006/10/09 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
php PDO异常处理详解
2016/11/20 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
Python httplib模块使用实例
2015/04/11 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python mock测试的示例
2020/10/19 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
青春寄语大全
2014/04/09 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
mysql 子查询的使用
2022/04/28 MySQL
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android