比如一个请求还没结束的时候进来了第二个请求,这个时候日志就会重叠... 我能想到的,比如,请求进入的时候运行日志记录开始,后续的日志记录到一个数组里,结束的时候一次性写到文件里去,保证一块一块的.. 想知道有没有别的办法
回复 (7)
W
引用 AnzerWall如果是想链路追踪的话,就在请求进入的时候增加一个requestID,然后在日志中都附加这个字段,最终可以整理出统一请求的日志
@AnzerWall 好吧,从成本上看这是最合理的..改动也最小,谢谢
B
koa是洋葱圈模型 所以可以在响应的最后再打印出日志
module.exports = async (ctx, next) => {
const startTime = Date.now()
await next()
const endTime = Date.now()
console.log(JSON.stringify({
startTime,
endTime,
runTime: endTime - startTime
// request and response
}))
}
W
引用 Blacatekoa是洋葱圈模型 所以可以在响应的最后再打印出日志 https://segmentfault.com/a/1190000013981513
@Blacate 我主要的目的是运行过程中的日志..当然,本次请求的结果可以在最后打印..问题是只打印结果的话在哪打印都不会有区别呀...
M
添加request_id字段来区分。
J
一次请求过程中产生的日志都统一push到一个数组中,请求结束后再按顺序打印数组中所有的内容
L
4楼如果不是一个console.log全输出的话,也可能会有问题,想解决就得用一个console.log把整个数组输出出来。
一般情况下用1楼的方案应该就足够满足日志查阅的需求,不过当请求报错跳出的时候,会执行不到打印日志的代码,解决这个问题的话需要把await next()放到try catch结构里,并对异常做处理。
A
如果是想链路追踪的话,就在请求进入的时候增加一个requestID,然后在日志中都附加这个字段,最终可以整理出统一请求的日志
参与回复
登录后即可参与回复。登录