logging - Go - 包装记录器以便在请求的每条消息中添加特定信息

标签 logging go word-wrap

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

例如我的交易 ID 是 foo : 应用程序接口(interface) | [ Gin ] 2016/08/19 - 13:00:37 | 201 | 30.791855 毫秒 | 192.168.99.1:63922 | POST/v1/我的/端点 应用程序接口(interface) | time="2016-08-19T13:00:39Z"level=info msg="经过身份验证的 API 用户:测试"transactionId="foo" 应用程序接口(interface) | 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 “ 这是我希望在我的日志中包含的信息。

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

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

谢谢。

最佳答案

在记录器中添加您的事务 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 前缀。

关于logging - Go - 包装记录器以便在请求的每条消息中添加特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043108/

相关文章:

java - 如何为 System.out 制作记录器

Golang Cronjob vs time.Ticker 用例

Go - 如何增加最大 Stdin 输入长度?

regex - 使用逗号而不是空格将 Delphi 字符串自动换行到一定长度?

validation - 如何记录 Grails 命令对象错误?

c# - 日志记录结构 - 当必须记录每个方法时如何构建?

mysql - MyBatis能否记录可以直接运行的完整SQL

go - "for true {}"发生 "missing return at end of function"

windows-7 - 命令行语法可防止在 PowerShell 输出文件中换行?

CSS 流体布局 - 文本扩展区域