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生成带有雪花背景的验证码
Oct 09 PHP
PHP 编写大型网站问题集
May 07 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
ThinkPHP3.1查询语言详解
Jun 19 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
微信API接口大全
Apr 15 PHP
php面向对象编程self和static的区别
May 08 PHP
php查询操作实现投票功能
May 09 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
Jun 09 PHP
Laravel5.1 框架控制器基础用法实例分析
Jan 04 PHP
PHP7修改的函数
Mar 09 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按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
php微信开发自定义菜单
2016/08/27 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
Function.prototype.bind用法示例
2013/09/16 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
新手简单了解vue
2019/05/29 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python pandas读取csv后,获取列标签的方法
2018/11/12 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
工程招投标邀请书
2014/01/30 职场文书
宣传普通话标语
2014/06/27 职场文书
三方协议书
2015/01/27 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript