我使用zerolog
进行 Go 日志记录:
zerolog.SetGlobalLevel(zerolog.InfoLevel)
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"})
这会将所有消息打印到os.Stderr
中,但我希望将日志拆分为多个输出,并满足以下条件:DebugLevel
、InfoLevel
和WarnLevel
将被打印到os.Stdout
,ErrorLevel
、FatalLevel
和PanicLevel
将打印到os.Stderr
。
我怎么才能做到这一点?
2条答案
按热度按时间x6492ojm1#
你可以实现LevelWriter。例如(playground):
ujv3wf0j2#
你需要使用
MultiLevelWriter
,将日志转发到多个LevelWriter
s输出(虽然它不在函数签名中,但你应该给予它LevelWriter
s,否则它不会做任何特殊的逻辑)。LevelWriter
是io.Writer
和WriteLevel(level Level, p []byte) (n int, err error)
的接口,因此您可以添加所需的任何zerolog
写入器(因为它是io.Writer
),并在WriteLevel
上使用级别条件。下面是一个
LevelWriter
的例子:现在你需要在
MultiLevelWriter
中使用它两次:请注意,正如我所说,
zerologs
记录器是io.Writer
,您可以将os.Stdout
替换为zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "15:04:05"}