关于php:如何打印调试日志?

How to print a debug log?

我想调试一些PHP代码,但我想将日志打印到屏幕或文件对我来说很好。

我应该如何在PHP代码中打印日志?

通常的print / printf似乎是HTML输出,而不是控制台。

我有执行PHP代码的Apache服务器。


一个鲜为人知的技巧是mod_php将stderr映射到Apache日志。并且,有一个流,因此file_put_contents('php://stderr', print_r($foo, TRUE))将很好地将$foo的值转储到Apache错误日志中。


1
error_log(print_r($variable, TRUE));

可能有用


您可以使用error_log将错误日志文件(如果需要,也可以选择其他文件)发送到服务器。


如果您使用的是Linux:

1
file_put_contents('your_log_file', 'your_content');

要么

1
error_log ('your_content', 3, 'your_log_file');

然后在控制台

1
tail -f your_log_file

这将连续显示文件中的最后一行。


您需要改变心态。您正在编写PHP,而不是用来编写PHP的其他任何东西。在控制台环境中无法在PHP中进行调试。

在PHP中,您有3类调试解决方案:

  • 输出到网页(有关详细信息,请参见dBug库)。
  • 写入日志文件
  • 使用xDebug进行会话调试
  • 学习使用这些语言,而不是尝试使PHP的行为像您习惯的其他语言一样。


    您在控制台上调试吗?有许多用于调试PHP的选项。
    用于快速调试和肮脏调试的最常用功能是var_dump。

    话虽这么说,但尽管var_dump很棒,而且很多人都这样做,但是还有其他工具和技术可以使它变得更有趣。

    如果要在网页中进行调试,可以帮忙的事情是,在转储语句周围包裹标记,以为数组和对象设置正确的格式。

    即:

    1
    2
    3
    4
    5
    6
    7
     some html code ....
          link;?>">some link to test


          dump $tpl like this:

        [cc lang="
    php"]<?php var_dump($tpl); ?>

    最后,但并非最不重要的一点是,请确保是否将调试错误处理设置为显示错误。如果您无法访问服务器配置,则可能需要在脚本顶部添加它。

    1
    2
    error_reporting(E_ALL);
    ini_set('display_errors', '1');

    祝好运!


    您也可以这样写文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $logFilePath = '../logs/debug.text';
    ob_start();

    // if you want to concatenate:
    if (file_exists($logFilePath)) {
        include($logFilePath);
    }
    // for timestamp
    $currentTime = date(DATE_RSS);

    // echo log statement(s) here
    echo"

    $currentTime - [log statement here]"
    ;

    $logFile = fopen($logFilePath, 'w');
    fwrite($logFile, ob_get_contents());
    fclose($logFile);
    ob_end_flush();

    确保设置了正确的权限,以便php可以访问和写入文件(775)。


    简单的方法是trigger_error:

    1
     trigger_error("My error");

    但您不能放置数组或对象,因此使用


    如果您不想集成Zend之类的框架,则可以使用trigger_error方法登录到php错误日志。


    您可以使用:

    1
    2
    3
    <?php
    echo 'console.log("debug log")';
    ?>


    我使用cakephp,所以我使用:

    1
    $this->log(YOUR_STRING_GOES_HERE, 'debug');


    我已经使用了许多方法,但是由于在开发时通常需要进行调试,并且由于我是在localhost上进行开发,因此我遵循了其他人的建议,现在写入了浏览器的JavaScript调试控制台(请参见http://www.codeforest。 net / debugging-php-in-browsers-javascript-console)。

    这意味着我可以在浏览器中查看PHP生成的网页,然后按F12键快速显示/隐藏任何调试跟踪。

    由于我一直在寻找调试器,CSS布局等开发人员工具,因此在这里查看我的PHP loggon是有意义的。

    如果有人决定向我们提供该代码,则我做了一个小的更改。后

    function debug($name, $var = null, $type = LOG) {

    我加了

    $name = 'PHP: ' . $name;

    这是因为我的服务器端PHP生成了包含JavaScript的HTML,我发现区分PHP和JS的输出非常有用。

    (注意:我目前正在对此进行更新,以允许我打开和关闭不同的输出类型:从PHP,从JS和数据库访问)


    这是调试和记录php的好工具:PHp调试器和记录器

    它仅需3行代码即可直接使用。
    它可以将消息发送到js控制台进行ajax调试,并且可以替换错误处理程序。
    它还以更易读的格式转储有关变量的信息,例如var_dump()和print_r()。
    很好的工具!


    您可以使用php curl模块来调用http://liveoutput.com/。这在安全的公司环境中非常有用,在该环境中,php.ini中存在某些限制,这些限制限制了file_put_contents的使用。


    您可以使用

    1
    2
    3
    4
    5
    <?php
    {
        AddLog("anypage.php","reason",ERR_ERROR);
    }
    ?>

    或者,如果您想在日志中打印该语句,则可以使用

    1
    AddLog("anypage.php","string:".$string,ERR_DEBUG_LOW);