go中logrus 用hook添加字段,如何获取api请求过来的参数
时间: 2024-10-16 22:19:01 浏览: 6
在Go语言中,`logrus`库允许通过Hook机制添加自定义的日志处理器,比如记录额外的上下文信息。如果你想在Logrus中获取API请求的参数,通常你需要在HTTP处理函数中捕获这些参数,并将其作为额外的数据结构传递给`WithField`方法来附加上日志条目。
下面是一个简单的例子:
```go
import (
"context"
"github.com/sirupsen/logrus"
)
// 假设你有一个处理HTTP请求的函数
func handleRequest(w http.ResponseWriter, r *http.Request) {
// 获取请求参数,这里假设我们从请求URL查询参数中获取
params := getParamsFromRequestURL(r.URL.Query())
// 创建一个包含请求参数的日志上下文
ctx := context.WithValue(r.Context(), "requestParams", params)
// 使用这个上下文创建logger并打印日志
log := logrus.WithFields(logrus.Fields{
"method": r.Method,
"endpoint": r.URL.Path,
"params": params,
}).WithContext(ctx)
log.Info("Handling request")
}
// 实现getParamsFromRequestURL函数来获取实际参数
func getParamsFromRequestURL(query url.Values) map[string]string {
// ... 从query对象中提取并返回参数
return query
}
// 然后你可以设置一个Hook来接收这些带有参数的日志
hook := &logrus.HookFunc(func(e *logrus.Entry) error {
// 在这里,你可以访问到每个日志条目的"requestParams"字段
entry := e.Data["requestParams"].(map[string]string)
// 打印或处理这些参数
for k, v := range entry {
fmt.Printf("Received parameter %s: %v\n", k, v)
}
return nil
})
logrus.AddHook(hook)
```
在这个例子中,`handleRequest`函数会将请求参数附加到日志中,然后Hook可以在接收到日志时访问这些参数。
阅读全文