beego log中增加request id的一种方式

有时候要在生产环境中追查问题,每个请求有一个唯一的request id对于定位问题十分有帮助。下面介绍一种非常简单的方式。

  1. 继承beego.Controller,重写其Prepare方法,在其中生成request id并写入到当前上下文的数据存储结构体中:
    requestId := uuid.NewV4().String()
    this.Ctx.Input.SetData("requestId", requestId)
  2. 其他地方使用request Id
    rid := this.Ctx.Input.GetData("requestId").(string)
    beego.Info("profile request, request ID:", rid)

7 个评论

还有另一种实现方式就是过滤器:

```
var FilterRequestID = func(ctx *context.Context) {
requestId := uuid.NewV4().String()
this.Ctx.Input.SetData("requestId", requestId)
}

beego.InsertFilter("/*",beego.BeforeRouter, FilterRequestID)
```

调用的话也和和你一样
md语法没有格式化?
怎么讲?
怎么讲?
我说的谢大的评论。md语法没有渲染。
想在每一行的日志中加入这个reqquest id呢
在不带receiver的普通函数中,如果不把ID作为参数传入(所有要打印的函数都改为结构体方法太过繁琐)要如何打印出ID呢?还是说代码中不应该出现普通函数?

要回复文章请先登录注册