如何打印调试日志?

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

如何打印 PHP 代码中的日志?

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

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

302907 次浏览

如果不想集成像 赞德这样的框架,那么可以使用 触发器错误方法将日志记录到 php 错误日志。

可以使用 Error _ log 错误日志将错误日志文件发送到服务器(如果愿意,也可以选择其他文件)

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

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

  1. 输出到一个网页(参见 dBug 库获得更好的视图)。
  2. 写入日志文件
  3. 使用 xDebug 进行会话调试

学会使用这些语言,而不是试图让 PHP 表现得像您所习惯的任何其他语言一样。

是否在控制台上进行调试? 调试 PHP 有多种选项。 用于快速调试的最常用函数是 Var _ dump

话虽如此,尽管 var _ dump 非常棒,而且很多人都是用它来做所有事情,但是还有其他 工具和技术可以为它增添一些情趣。

如果在网页中进行调试,那么可以在 dump 语句周围包装 <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');

祝你好运!

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

你可以用

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

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

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

简单来说就是触发错误:

 trigger_error("My error");

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

var_dump

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

error_log(print_r($variable, TRUE));

可能有用

这是一个调试和记录 php 的好工具: PHP 调试器和记录器

它只需要3行代码就可以立即工作。 它可以将消息发送到 js 控制台进行 ajax 调试,并且可以替换错误处理程序。 它还转储有关 var _ dump ()和 print _ r ()等变量的信息,但是格式更易读。 非常好的工具!

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

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

因为我一直在寻找用于调试器、 CSS 布局等的开发工具,所以在那里查看我的 PHP 日志是有意义的。

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

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

我加了一句

$name = 'PHP: ' . $name;

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

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

如果你使用 Linux:

file_put_contents('your_log_file', 'your_content');

或者

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

然后在控制台

tail -f your_log_file

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

我使用 cakephp,所以我使用:

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

您也可以写入这样的文件:

$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)。

你可使用:

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