如何使用zerolog将不同级别日志分别输出到stdout和stderr
Zerolog按日志级别分流至Stdout和Stderr的实现
你可以通过zerolog的LevelFilter和MultiLevelWriter组件实现按级别分流日志,具体实现如下:
完整代码示例
package main import ( "os" "github.com/rs/zerolog" "github.com/rs/zerolog/log" ) func main() { // 设置全局日志级别为Debug,确保所有目标级别都能被处理 zerolog.SetGlobalLevel(zerolog.DebugLevel) // 配置Stdout输出:仅处理Debug、Info、Warn级别 stdoutWriter := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "15:04:05"} stdoutFilter := zerolog.LevelFilter{ Writer: stdoutWriter, MinLevel: zerolog.DebugLevel, MaxLevel: zerolog.WarnLevel, } // 配置Stderr输出:仅处理Error、Fatal、Panic级别 stderrWriter := zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"} stderrFilter := zerolog.LevelFilter{ Writer: stderrWriter, MinLevel: zerolog.ErrorLevel, MaxLevel: zerolog.PanicLevel, } // 合并两个带过滤规则的Writer log.Logger = log.Output(zerolog.MultiLevelWriter(stdoutFilter, stderrFilter)) // 测试不同级别日志输出 log.Debug().Msg("Debug级日志(输出到Stdout)") log.Info().Msg("Info级日志(输出到Stdout)") log.Warn().Msg("Warn级日志(输出到Stdout)") log.Error().Msg("Error级日志(输出到Stderr)") log.Fatal().Msg("Fatal级日志(输出到Stderr)") // log.Panic().Msg("Panic级日志(输出到Stderr)") }
关键说明
LevelFilter:用于限制当前Writer仅处理指定级别范围内的日志,通过MinLevel和MaxLevel定义级别区间MultiLevelWriter:将多个Writer组合,日志会被分发到所有匹配其级别过滤规则的Writer- 全局日志级别:必须设置为目标级别中的最低级(这里是
DebugLevel),否则低于全局级别的日志会被提前过滤,无法进入后续的分流逻辑
内容的提问来源于stack exchange,提问作者baruchiro
相关产品推荐
相关产品推荐

