【问题标题】:Go - Wrap logger in order to add a specific information in each message of a requestGo - 包装记录器以便在请求的每条消息中添加特定信息
【发布时间】:2016-08-20 01:52:16
【问题描述】:

我正在开发一个 http api 项目,我想实现一件事,但我还没有找到方法。 所以,在我的例子中,我发送了一个事务 id 请求,我想做的事情是获取这个事务 id 并在记录器中使用它,在当前请求的每个日志条目中添加这个信息。如果发生某些问题,当我想检索信息时,我想这样做以便更好地过滤我的日志。

例如,我的交易 ID 是 foo api | [GIN] 2016/08/19 - 13:00:37 | 201 | 30.791855ms | 192.168.99.1:63922 | POST /v1/my/endpoint api | time="2016-08-19T13:00:39Z" level=info msg="Authenticated API user: tests" transactionId="foo" api | time="2016-08-19T13:00:39Z" level=debug msg="SQL query" args=25 query=" SELECT id, created, information1, information2 FROM mydb.mytable WHERE id = ?; " transactionId="foo" 这是我希望在日志中包含的信息。

所以不是在每个日志调用中注入事务 id,我想知道是否有一种方法可以将记录器用作单例并在每次调用记录器时添加信息。

我希望我在这个问题中提供了足够的细节。

谢谢。

【问题讨论】:

    标签: logging go word-wrap


    【解决方案1】:

    在记录器中为您的交易 ID 添加前缀。标准的 go logger 提供了许多方法来做到这一点。一个例子是 log.New() 方法。

    func GetLogger(transactionID string) *log.Logger {
        return log.New(os.Stdout, fmt.Sprintf("[transactionId = %s ] ", transactionID),
             log.Lshortfile)
    }
    

    GetLogger 将为您提供一个记录器,该记录器将在每个日志中添加您的 transactionID 前缀。

    【讨论】:

      【解决方案2】:

      这是从my answer here 复制的 logrus 解决方案,将其放在中间件链的顶部,并更新字段以获取请求的 txid。

      func Logrus(logger *logrus.Logger) gin.HandlerFunc {
          return func(c *gin.Context) {
              start := time.Now().UTC()
              path := c.Request.URL.Path
              c.Next()
              end := time.Now().UTC()
              latency := end.Sub(start)
              logger.WithFields(logrus.Fields{
                  "status":     c.Writer.Status(),
                  "method":     c.Request.Method,
                  "path":       path,
                  "ip":         c.ClientIP(),
                  "duration":   latency,
                  "user_agent": c.Request.UserAgent(),
              }).Info()
          }
      }
      GinEngine.Use(Logger(logrus.StandardLogger()))
      

      【讨论】:

        猜你喜欢
        • 2020-06-26
        • 2018-08-02
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多