2010-10-20 70 views
0

我正在寻找在每个函数结束时调用自定义错误日志/调试函数。在PHP函数的末尾自动执行函数

例如:

  • 我想打电话给error_log(__METHOD__);
  • 我想echo $query;
  • 显示的执行时间等。

在用于调试的每个函数的末尾,而无需每次调用该定制功能。

非常感谢。

回答

1

多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] ---