LogTraceAspect.php 2.07 KB
Newer Older
1 2 3 4 5 6
<?php
namespace Meibuyu\Micro\Aspect;

use Hyperf\Di\Annotation\Aspect;
use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint;
Liu lu's avatar
Liu lu committed
7
use Hyperf\HttpServer\Contract\RequestInterface;
8
use Hyperf\Utils\Context;
9 10
use Meibuyu\Micro\Annotation\LogTrace;
use Meibuyu\Micro\Handler\LogTrace\LogTraceHandler;
11
use Psr\Http\Message\ServerRequestInterface;
12
use Hyperf\Utils\Coroutine;
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

/**
 * @Aspect(
 *   annotations={
 *      LogTrace::class
 *   }
 * )
 */
class LogTraceAspect extends AbstractAspect
{

    /**
     * 优先级
     * @var int
     */
    public $priority = 999;

    public function process(ProceedingJoinPoint $proceedingJoinPoint)
    {
32
        try {
33
            $object  = Context::get(ServerRequestInterface::class);
Liu lu's avatar
Liu lu committed
34
            $fd = $object?('fd'.$object->getSwooleRequest()->fd):('co'.Coroutine::id());
35 36
            Context::set('log_trace_request_id',$fd);

37 38
            $originParams = [
                'called_params'=>$proceedingJoinPoint->getArguments(),
39
                'http_params'=>$object?make(RequestInterface::class)->all():[]
40 41 42 43 44
            ];
            LogTraceHandler::createLogTrace(
                $proceedingJoinPoint->className.'@'.$proceedingJoinPoint->methodName,
                $originParams
            );
Liu lu's avatar
Liu lu committed
45
            $requestId =  LogTraceHandler::getRequestId();
Liu lu's avatar
Liu lu committed
46 47
            register_shutdown_function(function ()use($requestId,$originParams,$proceedingJoinPoint) {

Liu lu's avatar
Liu lu committed
48
               put_log(json_encode([
Liu lu's avatar
Liu lu committed
49 50
                   'request_id'=>$requestId,'error_msg'=>error_get_last(),'params'=>$originParams
               ]),
Liu lu's avatar
Liu lu committed
51
                   str_replace('\\','_',$proceedingJoinPoint->className).
52
                   '/'.$proceedingJoinPoint->methodName.'/'.date('Ymd').'.txt'
Liu lu's avatar
Liu lu committed
53
               );
Liu lu's avatar
Liu lu committed
54
            });
55 56
            $result =  $proceedingJoinPoint->process();
            LogTraceHandler::recordProcess('返回结果:'.json_encode($result));
57
            LogTraceHandler::markComplete();
58 59 60 61 62 63

            return $result;
        }catch (\Throwable $exception){
            LogTraceHandler::recordProcess($exception);
            throw $exception;
        }
64

65
    }
66

67
}