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 a simple smtp class
Nov 26 PHP
php生成xml简单实例代码
Dec 16 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP中的日期加减方法示例
Aug 21 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 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基于imap获取邮件实例
2014/11/11 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
2014/06/10 Python
python常见排序算法基础教程
2017/04/13 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
python学生管理系统
2019/01/30 Python
python制作抖音代码舞
2019/04/07 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
实习自荐信
2013/10/13 职场文书
机械电子工程专业推荐信范文
2013/11/20 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
网络妈妈观后感
2015/06/08 职场文书