只需要把下边的方法放在 bootstrap/app.php 文件即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
/*
|--------------------------------------------------------------------------
| 记录执行时间, 如果大于 3s 则把信息更新到 sentry
|--------------------------------------------------------------------------
*/
app()->terminating(function () {
$handleCliInfo = function () {
// 哪些命令不进行记录
$except = [
'queue:work'
];
$info = with(new \Symfony\Component\Console\Input\ArgvInput())->getFirstArgument();
return in_array($info, $except) ? '' : $info;
};
$start = request()->server('REQUEST_TIME_FLOAT'); // 脚本开始时间
$end = microtime(true); // 当前方法执行时间,可以认为是结束时间
$diff = $end - $start;
if (env('MAX_EXECUTE_TIME', 3) <= $diff) { // 如果执行时间超过三秒则执行下边代码
$info = app()->runningInConsole() ? $handleCliInfo() : app('request')->getPathInfo(); // 如果是
if (!empty($info)) {
app('sentry')->captureMessage(
'Execute current is %ss (path: %s)',
[
intval($diff),
$info
],
[
'fingerprint' => [$info] // !!! 这里使用 fingerprint 参数解决所有 sentry message 都被集合在一条记录的问题
]
);
}
}
});
|