使用logrus库,并发请求下,如何区分开哪些日志属于哪个请求?

1. 运行环境#

go1.19 linux/amd64

2. 问题描述?#

如果 logrus 库打印日志,并发请求下,如下代码,如果直接打印,日志会混在一起,无法分清哪条日志属于哪个请求,大家都是用什么办法来区分开呢?

在 main 中创建了一个 logrus 实例,然后进行一些初始化操作

var log = logrus.New()

func main() {
  log.Out = os.Stdout
  log.Formatter = &logrus.JSONFormatter{}
  ....
}

在接收请求的函数中,使用 main 中的全局变量 log 进行打印日志

func (ctl *RerankControllerStruct) Rerank(ctx context.Context, req *pb.RerankRequest) (resp *pb.RerankResponse, err error) {
    log.Info("RerankType:", req.GetRerankType(), ", Qid:", req.GetQid())
    ......
}

每个请求都使用同一个 log 变量,导致日志都混在一起,如果每次请求都创建一个新的 log,如 logrus.New (),那就会导致每次创建的 log 都需要初始化,所以有什么好的方法吗?

3. 您期望得到的结果?#

并发请求,区分开打印的日志属于哪个请求

4. 您实际得到的结果?#

2年前 评论
OverCookkkkk (楼主) 2年前
AB (作者) 2年前
OverCookkkkk (楼主) 2年前
讨论数量: 7

从入口处, logger 透传

2年前 评论
AB 2年前
2年前 评论
OverCookkkkk (楼主) 2年前
AB (作者) 2年前
OverCookkkkk (楼主) 2年前