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

jto*_*oak 5 logging go word-wrap

我正在研究一个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,我想知道是否有办法将记录器用作单例并在每次调用记录器时添加信息.

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

谢谢.

May*_*tel 2

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

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

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