希望对接口的逻辑流程做日志记录,控制器请求 -> 数据库操作 -> 控制器响应 等一块内容记录在一个文件中。
针对以上,该如何实现,大家有没有好的想法,谢教。
有想法,不过我自己没试过.给个思路你去实现看看.
建一个静态类,在中间件开始 生成一个uuid,存到静态类里面去
在 bootstrap 里面 Db::listen(function(){ 读取静态类uuid,有uuid就把sql写入静态类里去 })
在中间件响应那,读取静态类里面sql并且清掉uuid.
我现在也在考虑这个问题呢,也是想着在中间件中处理这些,就是不好拿sql,数据好拿
老大不是专门写了一个webman日志插件吗? 去看看那个插件
哪个没有控制器这些
目前所实现的:
这个可以呀,兄弟是怎么实现的,按照群主的哪个搞得嘛?
因为 数据库监听是针对所有数据库操作, 和 控制的逻辑按顺序处理响应 是不同的,所以在并发情况下,记录写入会存在问题,所以在每个记录处都显式的记录了uuid便于对应。但显然这个方案是无法使用的。
我再去研究下。
你所说的的并发无效是错误的,数据库监听是针对当前进程的数据库操作,而不是所有的数据库操作,所以,当并发时,当前进程监听的只能是当前进程执行的sql.然而webman是同步阻塞的,当前进程只能执行一个请求,我并没看到有哪里会导致无法使用.
如下图
写入问题,如下图:
我现在没空,晚上或者后天我会自己写一个测试看看的.
写入不是顺序的问题不大啊,requestId不就是为了做过滤的么
cat abc.log | grep 'request-id'
就可以看到单次请求的全过程
单个worker的写入是顺序的,但是各个worker之间不是顺序的,很正常
我在自己项目本地加上去测过了,一秒内十几个请求,我没看到有一个sql 串了请求的.
要复现也简单,开2worker,一个worker内处理一个长耗时请求,一个worker处理多个短耗时请求,这样你就能看到了
有想法,不过我自己没试过.给个思路你去实现看看.
建一个静态类,在中间件开始 生成一个uuid,存到静态类里面去
在 bootstrap 里面
Db::listen(function(){
读取静态类uuid,有uuid就把sql写入静态类里去
})
在中间件响应那,读取静态类里面sql并且清掉uuid.
我现在也在考虑这个问题呢,也是想着在中间件中处理这些,就是不好拿sql,数据好拿
老大不是专门写了一个webman日志插件吗?
去看看那个插件
哪个没有控制器这些
目前所实现的:
这个可以呀,兄弟是怎么实现的,按照群主的哪个搞得嘛?
因为 数据库监听是针对所有数据库操作, 和 控制的逻辑按顺序处理响应 是不同的,所以在并发情况下,记录写入会存在问题,所以在每个记录处都显式的记录了uuid便于对应。但显然这个方案是无法使用的。
我再去研究下。
你所说的的并发无效是错误的,数据库监听是针对当前进程的数据库操作,而不是所有的数据库操作,所以,当并发时,当前进程监听的只能是当前进程执行的sql.然而webman是同步阻塞的,当前进程只能执行一个请求,我并没看到有哪里会导致无法使用.
如下图
写入问题,如下图:
我现在没空,晚上或者后天我会自己写一个测试看看的.
写入不是顺序的问题不大啊,requestId不就是为了做过滤的么
就可以看到单次请求的全过程
单个worker的写入是顺序的,但是各个worker之间不是顺序的,很正常
我在自己项目本地加上去测过了,一秒内十几个请求,我没看到有一个sql 串了请求的.
要复现也简单,开2worker,一个worker内处理一个长耗时请求,一个worker处理多个短耗时请求,这样你就能看到了