写一个把调试信息输出到磁盘文件的DEBUG程序

原创 2007年10月06日 17:11:00
昨天提到过,在下正在看OPENCART的源代码,随着工作的深入,局面日益复杂起来,写一些如echo,print_r等语句直接把变量显示在浏览器上,不仅干扰了正常的系统显示,因为SESSION的使用,也会造成系统运行时的干扰。要想个办法能把调试信息保存在一个文件里,运行过后调出来慢慢看,不是一个很好的办法吗?

   突然想起前两天发到论坛里的一篇文章:http://www.phpchina.com/bbs/thread-37420-1-2.html,里面不是有一个好的调试类吗?找出来一看,果然可以利用上,就搬出来做到一个文件里,代码如下

<?php

/* usage:
     write in:
        ZFDemo_Log::log("PHP extensions loaded = /n    " . implode("/n    ", $extensions));
     or:
        ZFDemo_Log::log("The '$ext' extension is required, but not currently loaded by php.");
       
        ZFDemo_Log::log("Zend_Session.ini=" . print_r($sessionConfig->toArray(), true));
        
     output:
        ZFDemo_Log::show();  

require_once('zfdemo_log.php');

*/

class ZFDemo_Log
{
    // very simple running log of "debug/" messages to highlight inner workings of demo
    public static $log = '';


    /**
     * Accumulate log messages, but also append them to a running log file for easy viewing.
     */
    public static function log($msg, $before = null)
    {
        static $flushed = false;
        if ($before) {
            self::$log = "$msg/n" . self::$log;
        } else {
            self::$log .= "$msg/n";
        }

        $logfile = 'log.txt';
        // performance is not an issue, so just sync to disk everytime
        if (isset($logfile)) {
            if ($flushed) {
                file_put_contents($logfile, "$msg/n", FILE_APPEND);
            } else {
                file_put_contents($logfile, self::$log);
            }
            $flushed = true;
        }
    }


    /*
     * Useful if you modify the demo, and need to quickly see the debug log in your browser.
     */
    public static function show()
    {
        echo "<html><head><title>ZF Demo Debug Log</title></head>/n<body>/n<pre>";
        echo htmlentities(self::$log, ENT_QUOTES, 'UTF-8');
        echo '</pre></body></html>';
    }


    public static function get()
    {
        return self::$log;
    }
}

保存到你正在开发的文件夹中,可以放在一个子目录下,如/DEBUG/zfdemo_log.php,然后在你需要调试的文件里进行调用,例示代码如下:

<pre>
<?php
require_once('debug/zfdemo_log.php');
$a = array (1, 2, array ("a", "b", "c"));

$b = array (3, 4, array ("d", "f", "g"));


ZFDemo_Log::log('$a=' . print_r($a, true));

ZFDemo_Log::log('$b=' . print_r($b, true));

ZFDemo_Log::show(); 

?>
</pre> 

执行后系统正常运行,然后在同一目录下可以找到一个文本文件log.txt,内容如下:

$a=Array
(
    [0] => 1
    [1] => 2
    [2] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )

)

$b=Array
(
    [0] => 3
    [1] => 4
    [2] => Array
        (
            [0] => d
            [1] => f
            [2] => g
        )

)

 

在对复杂的系统进行调试时,这种方法不失高效方便。当然如果需要直接在屏幕上查看调试信息的话,可在相应位置写入代码:

  ZFDemo_Log::show();  

即可实现浏览器上直接显示调试信息。

   (当时发贴时,二楼一个家伙马上就说这个教程“误人子弟”,其目的无非是想打压ZF,不过大家可以看到,这个例子中可以提出这么好的调试类代码,怎么说也会对大伙有益吧,如果你觉得这份东东对你有帮助,请留言支持一下吧

 

学习记录-Qt将调试信息保存到文件

如果能将调试信息打印到文件,那软件发布到其他机器运行时,就可以记录软件运行的异常情况了。 查看手册,Qt 的QtMsgHandler qInstallMsgHandler ( QtMsgHandle...
  • u013399898
  • u013399898
  • 2016年11月16日 21:14
  • 764

Qt 调试信息,输出日志

注:以下方法仅适用于 Qt5 及以上版本 参考:Qt之qInstallMessageHandler(输出详细日志) Qt之qInstallMessageHandler(重定向至...
  • qq_35488967
  • qq_35488967
  • 2017年08月01日 13:48
  • 415

(原创)如何在脚本调试过程中输出调试诊断信息

版权声明:本文为原创文章,转载请先联系并标明出处 性能测试中,脚本调试往往占据了很大一部分时间,简明直接的调试诊断信息可以帮助测试人员快速的获取所需信息、调整脚本。LoadRunner中通过调试...
  • jiuqifengyu
  • jiuqifengyu
  • 2017年05月10日 14:36
  • 242

【Qt】qDebug()调试信息保存至txt日志文件

开发环境:Win10 Qt5.7.0 VisualStudio2015 核心:qInstallMessageHandler函数 Qt可将qDebug()输出的信息(其他信息),进行额外处理 最常见的用...
  • shihoongbo
  • shihoongbo
  • 2016年10月09日 11:01
  • 1375

自定义log日志输出到文件中保存

log.h //log.h #ifndef _ITCAST_LOG_H_ #define _ITCAST_LOG_H_ /* #define IC_NO_LOG_LEVEL 0 #define ...
  • waldmer
  • waldmer
  • 2015年02月21日 20:30
  • 1305

Python 日志向控制台和文件输出

python 的标准库里有日志记录模块--logging,具体可参考官方API  logging模块    1.创建logger实例 logging模块是依靠调用Logger类的方法来实现的,Log...
  • seven_five577
  • seven_five577
  • 2016年03月17日 16:17
  • 5133

将GDB中的输出定向到文件

有时候输出信息太长,屏放不下,下面介绍两种将gdb的输出信息存到文件的方法。 方法一:适合临时向文件输出些信息的情况。 比如要用info functions输出所有函数,结果往往有一大坨,所...
  • mergerly
  • mergerly
  • 2014年12月18日 00:26
  • 4703

DebugView输出调试信息

在写windows程序时,需要输出一些调试信息,这里介绍一种极其方便的方法。即使用OutputDebugString 在Debug模式下输出调试信息,在Release模式下不输出。 我们可以在VS的集...
  • xiamentingtao
  • xiamentingtao
  • 2016年12月22日 13:27
  • 1933

MFC 利用控制台输出调试信息(转)

转载的,出处不知道了。sorry 方法一: WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole,WriteConsole等,具体参见MSDN。 1。...
  • liuxizhen2009
  • liuxizhen2009
  • 2013年01月30日 22:39
  • 13629

javaWeb项目中如何将console中的信息输出到文件中

在开发web项目时,有时候一些老项目,对于log4j使用不是规范,造成有些log用的是stdout,这样web启动时,一些信息就会被刷掉,查看起来非常不方便,故此,有时候需要把console的信息保存...
  • Raynaing
  • Raynaing
  • 2016年12月19日 17:40
  • 1171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:写一个把调试信息输出到磁盘文件的DEBUG程序
举报原因:
原因补充:

(最多只允许输入30个字)