当前位置: 首页 > 后端技术 > PHP

Monolog自动填写RequestId-TraceId请求链接跟踪标识

时间:2023-03-29 23:15:30 PHP

在记录业务日志时,我们往往需要在每条日志中添加类似RequestId的唯一标识字符串,方便快速流式传输与某个请求相关的相关日志聚合查询出来。首先,RequestId是一个贯穿整个请求生命周期的单例。如果我需要在整个请求处理过程中透传RequestId或者作为参数显示到logger中,包括不同的服务层和模块,那代码简直不要太美观。Monolog作为最流行的PHP日志组件,如果能自动为每条日志填写RequestId,用起来就非常舒服了。Monolog的pushProcessor方法可以方便我们实现这个需求。pushProcessor中的处理器将处理并返回您记录的每条日志。在请求的初始阶段,会为本次请求生成一个全局的RequestId。我把它放在Request对象上。不同的框架可能有不同的获取请求会话的请求单例对象的方法。每个人都明白。或者可以使用单例对象来维护RequestId,只要是当前请求的单例模式即可(最好放在DIContainer中)。setFormatter($lFormatter)$logger->pushHandler($rfHandler);//这里是处理完成的地方$request->getRequestIdimplements$logger->pushProcessor(function($log){/**@varRequest$request*/$request=\request();//webman的$log['extra']['request-id']=$request->getRequestId();return$log;});info('thisismonologexample');$logger->info('这是日志将自动填充requestId');记得把RequestId返回给前端,这样问题反馈可以方便的追踪到请求链接。