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安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
简单的php新闻发布系统教程
May 09 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
PHP中的一些常用函数收集
May 26 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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
我的论坛源代码(四)
2006/10/09 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Windows 64位下python3安装nltk模块
2018/09/19 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
numpy基础教程之np.linalg
2019/02/12 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
keras之权重初始化方式
2020/05/21 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
python中@contextmanager实例用法
2021/02/07 Python
Internet体系结构
2014/12/21 面试题
校园安全广播稿
2014/02/08 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
高中军训感言600字
2014/03/11 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
保险公司年会主持词
2014/03/22 职场文书
授权委托书格式模板
2014/04/03 职场文书
移交协议书
2014/08/19 职场文书
企业宣传稿范文
2015/07/23 职场文书
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python