logrus
Hertz interfaces with logrus and lumberjack.
Currently, hlog supports the extended use of zap, logrus, zerolog, and slog, and Hertz provides the SetLogger interface for injecting user-defined logger implementations.
Taking zerolog as an example, such a function is implemented in 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"
}
However, such functions are not directly implemented in zap and logrus, and the original option needs to be added manually
Take zap as an example:
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"
}
Hertz interfaces with logrus and lumberjack.
Hertz interfaces with zap and lumberjack.
Hertz interfaces with zerolog and lumberjack.
Hertz interfaces with slog and lumberjack.