[英]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錯誤日志中。
error_log(print_r($variable, TRUE));
可能有用
您可以使用error_log將錯誤日志文件(如果需要,也可以選擇其他文件)發送到服務器。
如果您使用的是Linux:
file_put_contents('your_log_file', 'your_content');
要么
error_log ('your_content', 3, 'your_log_file');
然后在控制台中
tail -f your_log_file
這將連續顯示文件中的最后一行。
您需要改變心態。 您正在編寫PHP,而不是用來編寫PHP的其他任何東西。 在控制台環境中無法在PHP中進行調試。
在PHP中,您有3類調試解決方案:
學習使用這些語言,而不是嘗試使PHP的行為像您習慣的其他語言一樣。
您在控制台上調試嗎? 有許多用於調試PHP的選項。 用於快速且骯臟的調試的最常用功能是var_dump 。
話雖這么說,但盡管var_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');
祝好運!
您也可以這樣寫文件:
$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
)。
如果您不想集成Zend之類的框架,則可以使用trigger_error方法登錄到php錯誤日志。
簡單的方法是trigger_error:
trigger_error("My error");
但您不能放置數組或對象,因此使用
var_dump
您可以使用php curl模塊來調用http://liveoutput.com/ 。 這在安全的公司環境中非常有用,在該公司環境中,php.ini中存在某些限制,這些限制限制了file_put_contents
使用。
這是調試和記錄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 loggon是有意義的。
如果有人決定向我們提供該代碼,則我做了一個小的更改。 后
function debug($name, $var = null, $type = LOG) {
我加了
$name = 'PHP: ' . $name;
這是因為我的服務器端PHP生成了包含JavaScript的HTML,我發現區分PHP和JS的輸出非常有用。
(注意:我目前正在對此進行更新,以允許我打開和關閉不同的輸出類型:從PHP,從JS和數據庫訪問)
我使用cakephp,所以我使用:
$this->log(YOUR_STRING_GOES_HERE, 'debug');
您可以使用:
<?php
echo '<script>console.log("debug log")</script>';
?>
您可以使用
<?php
{
AddLog("anypage.php","reason",ERR_ERROR);
}
?>
或者,如果您想在日志中打印該語句,則可以使用
AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.