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 相关文章推荐
基于mysql的论坛(2)
Oct 09 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
PHP与C#分别格式化文件大小的代码
May 14 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
php单文件版在线代码编辑器
Mar 12 PHP
摘自织梦CMS中的图片处理类
Aug 08 PHP
PHP实现简易blog的制作
Oct 24 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
PHP时间函数使用详解
Mar 21 PHP
如何利用PHP实现上传图片功能详解
Sep 24 PHP
PHP正则表达式之RCEService回溯
Apr 11 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/18 PHP
php计算title标题相似比的方法
2015/07/29 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
全网小程序接口请求封装实例代码
2020/11/06 Javascript
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
python能做哪方面的工作
2020/06/15 Python
丝芙兰中国官方商城:SEPHORA中国
2018/01/10 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
求职信需要的五点内容
2014/02/01 职场文书
中班中秋节活动反思
2014/02/18 职场文书
《去年的树》教学反思
2014/04/11 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
深入理解pytorch库的dockerfile
2022/06/10 Python