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 相关文章推荐
网站当前的在线人数
Oct 09 PHP
php for 循环语句使用方法详细说明
May 09 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
php实现的数组转xml案例分析
Sep 28 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备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP中你应该知道的require()文件包含的正确用法
2015/06/12 PHP
PHP实现合并discuz用户
2015/08/05 PHP
yii分页组件用法实例分析
2015/12/28 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
php实现简单加入购物车功能
2017/03/07 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
javascript的键盘控制事件说明
2008/04/15 Javascript
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
KMP算法精解及其Python版的代码示例
2016/06/01 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
创意活动策划书
2014/01/15 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
整改落实自查报告
2014/11/05 职场文书
关于军训的感想
2015/08/07 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python