日志记录的时候,有没有什么办法能将一次请求相关的日志按照顺序罗列出来。 包括中间手动记录的日志。以及可能的异步执行的日志
目前用webman/log日志插件,只能保证默认的请求及SQl日志在一起。 自己记录一些日志的话。 不同请求的日志就会串在一起,很难排查一个请求完整的逻辑。
有没有什么办法能将一次请求的日志按照顺序排列。 甚至是异步执行的逻辑里面的日志。
例如在一开始搞个 request_id 所有的日志中都包含这个request_id 。 目前没想到什么优雅的方式在整个请求生命周期中传递这个request_id
这里写问题具体描述
日志用Monolog自定义一个Handler,handler里的write方法里调用生成一个保存在Context里的request_id,类似这样
handler:
RequestIdHolder
Context::get 这个用法哪里有相关文档吗? 我看wenman里面有这个对象,但是不知道生命周期是什么。文档里面没看到相关说明
Context生命周期和请求周期是一致的
谢谢大佬回复。 webman中的 Monolog 如何在配置文件中增加自定义的 processer 预处理下日志呢? 我看文档里面也没有相关写法。 http://www.symfonychina.com/doc/current/logging/processors.html 我想按照这个用法,自定义一个processor,结合context 插入一个 request_id
config/log.php 里配置 processers
配置文件里面没找到写法
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class,
'constructor' => [
runtime_path() . '/logs/webman.log',
7, //$maxFiles
Monolog\Logger::DEBUG,
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class,
'constructor' => [null, 'Y-m-d H:i:s', true],
],
'processors' => [
xxxxx::class, // 是在这里配置吗?
]
]
],
],
];
我这样写了不生效
vendor/workerman/webman-framework/src/support/Log.php
我不记得了,你研究下源码
好的,谢谢
搞定了,分享下
LogProcessor 定义一个日志处理器
config/log.php 配置文件
添加 processors 到配置文件中
测试记录的日志如下
日志效果,例如其中 request_id : 796681486b0d06e11bf15dc5d19f05e3 是循环执行,用于测试被其它请求打断。 可以根据这个搜索所有相关日志。结合其它日志分析工具。 结合request_id,以及日志时间。 分析单次请求的所有日志