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 相关文章推荐
追求程序速度,而不是编程的速度
Apr 23 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
php判断linux下程序问题实例
Jul 09 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
PHP goto语句用法实例
Aug 06 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
德生PL660的电路分析和打磨
2021/03/02 无线电
学习PHP的数组总结【经验】
2016/05/05 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python六大开源框架对比
2015/10/19 Python
python用户管理系统
2018/03/13 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
Python数据可视化之画图
2019/01/15 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
python之生成多层json结构的实现
2020/02/27 Python
python如何代码集体右移
2020/07/20 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
服务生自我鉴定
2014/01/22 职场文书
小学家长会邀请函
2014/01/23 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis