php 快速定位问题debugtrace 的用法。各位小伙伴大家好。
详细请看下面的代码,下面的代码讲述了在一个分片取模写缓存的例子里面如何跟踪堆栈。
/**
* 统计 uid 的调用情况
* @param type $uid
* @param string $key
*/
private function tongji($uid,$key){
// 取出原来的属性
$key = $key. "_" . $uid;
$r = $ this ->cache->hget( "untreated:msg_tongji" ,$key);
$num = 0 ;
if (! empty ($r)){
$r = json_decode($r,TRUE);
$num = intval($r[ 'num' ]);
$num++;
$arr = array ( 'num' =>$num);
} else {
$arr = array ( 'num' =>$num);
}
$arr = json_encode($arr,JSON_UNESCAPED_UNICODE);
$ this ->cache->hset( "untreated:msg_tongji" ,$key,$arr);
$ this ->log($uid, array ( 4053 ),$num);
}
/**
* 统计分析特定 uid 的上层调用 .
*
*/
private function log($uid,$arr,$num){
// 必须在数组里面,根据取模来控制日志写入量
if (in_array($uid, $arr) && $num % 1000 == 0 ){
$html = $ this ->debug();
logDebug( "uid:" . $uid. " " . $html, 'untreated:msg_log' );
}
}
private function debug(){
$ array =debug_backtrace();
unset ($ array [ 0 ]);
$html = '' ;
foreach ($ array as $row)
{
$html . =$row[ 'file' ]. ':' . $row[ 'line' ]. ' 行 ,' . ' 调用 :' . $row[ 'class' ]. '->' . $row[ 'function' ]. '(' . json_encode($row[ 'args' ]). ")\n" ;
}
return $html;
}
enjoy it.