我正在 Golang 中构建一个 Web 服务器。您知道 Golang 有一个context
包,并且官方建议始终将上下文作为第一个参数传递。context.Context
有一种Value
方法可以将变量保存在上下文中。
然而,大多数日志记录库还提供了一种继承记录器的方法,例如,使用父记录器的字段创建子记录器。在logrus(或其他记录器,没关系)中,您可以创建logrus.Entry
并申请WithFields
获取子记录器。
例如,当每个 HTTP 请求到来时,request-id
都会附加一个。我希望它能被放在上下文中,并作为一个字段记录在每个日志中。
那么,如何以正确的方式做到这一点呢?
谢谢!!
小智 0
您可以从传入请求中获取request-id
,然后使用上下文将 传递request-id
给您正在调用的函数。这是一个例子:https://medium.com/@cep21/how-to- Correctly-use-context-context-in-go-1-7-8f2c0fafdf39 。对于日志记录:使用 std 日志库定义您自己的记录器
func CreateCustomLogger(requestId string) *log.Logger {
defaultLoggingFlags :=
log.Ldate|log.Ltime|log.LUTC|log.Lmicroseconds|log.Lshortfile
return log.New(os.Stderr, requestId + ": ", defaultLoggingFlags)
}
Run Code Online (Sandbox Code Playgroud)
在你的函数中:
customLogger := CreateCustomLogger(requestId)
customLogger.Printf("Custom log message")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6362 次 |
最近记录: |