0
我正在尋找在每個函數結束時調用自定義錯誤日誌/調試函數。在PHP函數的末尾自動執行函數
例如:
- 我想打電話給
error_log(__METHOD__);
- 我想
echo $query;
- 顯示的執行時間等。
在用於調試的每個函數的末尾,而無需每次調用該定製功能。
非常感謝。
我正在尋找在每個函數結束時調用自定義錯誤日誌/調試函數。在PHP函數的末尾自動執行函數
例如:
error_log(__METHOD__);
echo $query;
在用於調試的每個函數的末尾,而無需每次調用該定製功能。
非常感謝。
爲此使用調試器/分析器。使用XDebug或Zend Debugger。
對於二者的比較,請參見
多RTM後,我不得不使用debug_backtrace();
即使它是昂貴的。
這裏是我是如何做到的:
// debug(debug_backtrace(),$query);
// $query is optional
define('DEBUG',true);
function debug($trace,$query = null) {
if(DEBUG) {
$caller=array_shift($trace);
error_log("Initiating class: " . $caller['class']);
error_log("Calling function: " . $caller['function']);
error_log("In file: " . $caller['file']);
error_log("@ line: " .$caller['line']);
if(isset($query))
{
error_log("Performing Query: " .$query);
}
error_log("---");
}
else
exit();
}
,並在每個函數結束時,我添加以下內容:
function init_userInfo($ai, $v) {
$this->user[$ai] = $v;
debug(debug_backtrace());
}
,或者如果函數有一個SQL查詢:
function insertQuery($query)
{
mysql_query($query)
or die("MySQL Error: " . mysql_error());
debug(debug_backtrace(),$query);
}
輸出一般是這樣在php_error.log中:
[20-Oct-2010 19:02:07] Initiating class: Db
[20-Oct-2010 19:02:07] Calling function: selectQuery
[20-Oct-2010 19:02:07] In file: /Code/classes/user.class.php
[20-Oct-2010 19:02:07] @ line: 100
[20-Oct-2010 19:02:07] Performing Query: SELECT * FROM user WHERE uid=(3) LIMIT 1
[20-Oct-2010 19:02:07] ---
[20-Oct-2010 19:02:07] Initiating class: User
[20-Oct-2010 19:02:07] Calling function: htmlform_addUserInfo
[20-Oct-2010 19:02:07] In file: /Code/index.php
[20-Oct-2010 19:02:07] @ line: 6
[20-Oct-2010 19:02:07] ---