如何打印调试日志?

时间:2011-05-21 03:51:56

标签: php debugging logging

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

我应该如何使用PHP代码打印日志?

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

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

15 个答案:

答案 0 :(得分:175)

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

答案 1 :(得分:125)

error_log(print_r($variable, TRUE)); 

可能有用

答案 2 :(得分:25)

您可以使用error_log向服务器发送错误日志文件(如果您愿意,还可以选择其他文件)

答案 3 :(得分:18)

如果你在Linux上:

file_put_contents('your_log_file', 'your_content');

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

然后在控制台

tail -f your_log_file

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

答案 4 :(得分:8)

你需要改变自己的思维方式。您正在编写PHP,而不是您以前编写的任何其他内容。 PHP中的调试不是在控制台环境中完成的。

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

  1. 输出到网页(请参阅dBug库以获得更好的视图)。
  2. 写入日志文件
  3. 使用xDebug进行会话调试
  4. 学会使用它们,而不是试图使PHP的行为与您习惯的其他语言一样。

答案 5 :(得分:5)

你在控制台上调试吗?调试PHP有各种选项。 用于快速和最常用的功能。脏调试是var_dump

尽管如此,虽然var_dump很棒,而且很多人只是做了所有事情,但还有其他tools and techniques可以让它更有趣。

如果在网页中进行调试,请在转储语句周围包装<pre> </pre>标记,以便为数组和对象提供正确的格式。

即:

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

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

error_reporting(E_ALL);
ini_set('display_errors', '1');
祝你好运!

答案 6 :(得分:2)

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

答案 7 :(得分:2)

简单的方法是trigger_error:

 trigger_error("My error");

但是你不能放数组或对象因此使用

var_dump

答案 8 :(得分:2)

你也可以写一个这样的文件:

$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 "\n\n$currentTime - [log statement here]";

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

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

答案 9 :(得分:1)

您可以使用php curl模块拨打http://liveoutput.com/。这在安全的企业环境中非常有用,其中存在限制file_put_contents使用的php.ini中的某些限制。

答案 10 :(得分:1)

这是一个很好的调试工具。记录php:PHp Debugger & Logger

只需3行代码即可开箱即用。 它可以将消息发送到js控制台以进行ajax调试,并可以替换错误处理程序。 它还转储有关var_dump()和print_r()等变量的信息,但格式更易读。 非常好的工具!

答案 11 :(得分:1)

我已经使用了很多这些,但由于我通常需要在开发时进行调试,并且由于我在localhost上开发,因此我遵循了其他人的建议,现在写入浏览器的JavaScript调试控制台(参见{ {3}})。

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

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

如果有人确定我们的代码,我做了一个小的改动。之后

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

我添加了

$name = 'PHP: ' . $name;

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

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

答案 12 :(得分:1)

我使用cakephp所以我使用:

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

答案 13 :(得分:1)

您可以使用:

<?php
echo '<script>console.log("debug log")</script>';
?>

答案 14 :(得分:-7)

您可以使用

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

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

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