记录程序执行之间,接口调用时间到日志文件或数据库
1、获取毫秒
private function getMillisecond() {
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
2、获取接口调用前,调用后的时间
$t1 = $this->getMillisecond(true);
$result = json_decode(Http::doPostJson($url,$data),true);
$t2 = $this->getMillisecond(true);
$this->miclog($t1,$t2,__METHOD__,$result,$data['funid']);
3、记录日志
private function miclog($t1,$t2,$name,$result = [],$funid = ''){
$lasttime = ($t2 - $t1).'ms';
$content = date('Y-m-d H:i:s').' '.$lasttime.' '.$name.' '.$funid;
file_put_contents('/tmp/ssyv5/jg_micro.log',$content.PHP_EOL,FILE_APPEND);
$length_time = $t2 - $t1;
if (200 < $length_time){
file_put_contents('/tmp/ssyv5/jg_micro_200.log',$content.PHP_EOL,FILE_APPEND);
}elseif (100 < $length_time){
file_put_contents('/tmp/ssyv5/jg_micro_100.log',$content.PHP_EOL,FILE_APPEND);
}
if (!$result){
file_put_contents('/tmp/ssyv5/jg_micro_die.log',$content.PHP_EOL,FILE_APPEND);
}
if ($length_time >= 5000){
file_put_contents('/tmp/ssyv5/jg_micro_overtime.log',$content.PHP_EOL,FILE_APPEND);
$this->addEditJgLog($funid,$length_time);
}
}
4、记录数据库
protected function addEditJgLog($funid,$length_time) {
// 记录到数据库
$jg_slow_log = M('jg_slow_log');
$where['funid'] = $funid;
$date = date('Y-m-d');
$where['date'] = $date;
$exist = $jg_slow_log->where($where)->find();
if (!$exist) { // 添加
$add_data = [
'funid' => $funid,
'date' => $date,
'times' => 1,
'min_micro' => $length_time,
'max_micro' => $length_time,
'update_time' => date('Y-m-d H:i:s'),
'create_time' => date('Y-m-d H:i:s'),
];
$jg_slow_log->add($add_data);
} else { // 修改
$max_micro = (int)$exist['max_micro'];
$min_micro = (int)$exist['min_micro'];
$times = ++$exist['times']; // 先加1,再赋值给变量
if ((int)$length_time > $max_micro) {
$max_micro = $length_time;
}
if ((int)$length_time < $min_micro) {
$min_micro = $length_time;
}
$edit_data = [
'min_micro' => $min_micro,
'max_micro' => $max_micro,
'times' => $times,
'update_time' => date('Y-m-d H:i:s'),
];
$jg_slow_log->where(['id'=>$exist['id']])->save($edit_data);
}
}