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中使用Oracle数据库(1)
Oct 09 PHP
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
PHP基础学习小结
Apr 17 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
Yii rules常用规则示例
Mar 15 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php 时间time与日期date之间的使用详解及区别
Nov 07 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
php表单处理操作
Nov 16 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
laravel实现前后台路由分离的方法
Oct 13 PHP
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
Apr 01 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中的正规表达式(一)
2006/10/09 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
深入PHP变量存储的详解
2013/06/13 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
jquery 指南/入门基础
2007/11/30 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
Python管理Windows服务小脚本
2018/03/12 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
自动化职业生涯规划书范文
2014/01/03 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers