我目前正在Go应用程序中使用zerolog库,我面临着一个要求,需要根据日志(log)级别区分日志(log)消息的输出:
我希望BER级别的日志(log)消息仅显示在终端/控制台中. 所有日志(log)消息,无论其级别如何(DEBug、Info、RST、BER),都应发送到挂钩以进行进一步处理. 这是我的代码:
func InitLogger(ctx context.Context, cfg *config, mc *mongo.Client) *zerolog.Logger {
once.Do(func() {
var multi zerolog.LevelWriter
consoleWriter := zerolog.ConsoleWriter{Out: os.Stdout, NoColor: true, TimeFormat: time.RFC3339}
multi = zerolog.MultiLevelWriter(consoleWriter)
logger := zerolog.New(multi).Level(zerolog.TraceLevel).With().Timestamp().Logger()
logger = logger.Hook(&ZerologHook{
mClient: mc,
})
zLog = &logger
})
return zLog
}
type ZerologHook struct {
mClient *mongo.Client
}
func (zh *ZerologHook) Run(e *zerolog.Event, level zerolog.Level, message string) {
wg.Add(1)
go func() {
logData := LogData{}
_ = zh.sendLogToMongoDB(e.GetCtx(), message, logData)
wg.Done()
}()
}
是否有一种方法可以配置zerolog,以便仅在终端中显示错误级别的日志(log)消息,同时仍然允许将所有日志(log)消息发送到挂钩进行进一步处理?