日志

Hertz 提供的日志相关第三方扩展。

目前 hlog 支持 zap, logrus, zerolog 和 slog 的拓展使用,Hertz 提供 SetLogger 接口用于注入用户自定义的 logger 实现。

打印日志并指定日志的 field

以 zerolog 为例,zerolog 中实现了这样的函数:

package main

import (
    "bytes"
    "github.com/cloudwego/hertz/pkg/common/json"
    hertzZerolog "github.com/hertz-contrib/logger/zerolog"
)

func main() {
    b := &bytes.Buffer{}
    l := hertzZerolog.New(hertzZerolog.WithField("service", "logging"))
    l.SetOutput(b)

    l.Info("foobar")

    type Log struct {
        Level   string `json:"level"`
        Service string `json:"service"`
        Message string `json:"message"`
    }

    log := &Log{}

    err := json.Unmarshal(b.Bytes(), log)//log.service=="logging"
}

而在 zap 和 logrus 中并未直接实现这样的函数,需要手动添加原始 option

以 zap 为例:

package main

import (
	"bytes"
	"github.com/cloudwego/hertz/pkg/common/json"
	hertzzap "github.com/hertz-contrib/logger/zap"
	"go.uber.org/zap"
)

func main() {
	b := &bytes.Buffer{}
	l := hertzzap.NewLogger(hertzzap.WithZapOptions(zap.Fields(zap.String("service", "logging"))))
	l.SetOutput(b)

	l.Info("foobar")

	type Log struct {
		Level   string `json:"level"`
		Service string `json:"service"`
		Message string `json:"message"`
	}

	log := &Log{}

	err := json.Unmarshal(b.Bytes(), log) //log.service=="logging"
}

logrus

Hertz 对接 logrus 和 lumberjack。

zap

Hertz 对接 zap 和 lumberjack。

zerolog

Hertz 对接 zerolog 和 lumberjack。

slog

Hertz 对接 slog 和 lumberjack。