日志
Hertz 提供打印日志的方式,默认打在标准输出。实现在 pkg/common/hlog
中,Hertz 同时也提供了若干全局函数,例如 hlog.Info
、hlog.Errorf
、hlog.CtxTracef
等,用于调用默认 logger 的相应方法。
如何打印日志
hertz 中可以直接调用 pkg/common/hlog
包下的方法打日志,该方法会调用 defaultLogger
上对应的方法。如实现一个打印 AccessLog 的中间件。
func AccessLog() app.HandlerFunc {
return func(c context.Context, ctx *app.RequestContext) {
start := time.Now()
ctx.Next(c)
end := time.Now()
latency := end.Sub(start).Microseconds
hlog.CtxTracef(c, "status=%d cost=%d method=%s full_path=%s client_ip=%s host=%s",
ctx.Response.StatusCode(), latency,
ctx.Request.Header.Method(), ctx.Request.URI().PathOriginal(), ctx.ClientIP(), ctx.Request.Host())
}
}
重定向默认 logger 的输出
可以使用 hlog.SetOutput
来重定向 hlog 提供的默认 logger 的输出。
例如,要把默认 logger 的输出重定向到启动路径下的 ./output.log
,可以这样实现:
package main
import (
"os"
"github.com/cloudwego/hertz/pkg/common/hlog"
)
func main() {
f, err := os.OpenFile("./output.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
panic(err)
}
defer f.Close()
hlog.SetOutput(f)
... // continue to set up your server
}
设置 logLevel
可以使用 hlog.SetLevel
来设置日志等级,高于该日志等级的日志才能够被打印出来。
hlog.SetLevel(hlog.LevelInfo)
目前支持的日志等级有
LevelTrace
LevelDebug
LevelInfo
LevelNotice
LevelWarn
LevelError
LevelFatal
日志拓展
目前 hlog 支持 zap 和 logrus 的拓展使用,日志拓展详见。
最后修改
April 18, 2023
: docs(wip): request context handler (36ea2d4)