如何使用 uber-go/zap 依照日誌等級記錄到 stdout 或 stderr?
問題:
設定 uber-go/zap 將訊息日誌寫入 stdout,將錯誤和致命日誌寫入 stderr。
答案:
要實現此目的,使用具有兩個內核的zapcore.NewTee,每個內核集處理特定的日誌等級:
<code class="go">import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" ) func main() { // Create a level enabler for info logs infoLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.InfoLevel }) // Create a level enabler for error and fatal logs errorFatalLevel := zap.LevelEnablerFunc(func(level zapcore.Level) bool { return level == zapcore.ErrorLevel || level == zapcore.FatalLevel }) // Create stdout and stderr writers stdoutSyncer := zapcore.Lock(os.Stdout) stderrSyncer := zapcore.Lock(os.Stderr) // Create a tee core that writes to both stdout and stderr core := zapcore.NewTee( // Core for info logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stdoutSyncer, infoLevel, ), // Core for error and fatal logs zapcore.NewCore( zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), stderrSyncer, errorFatalLevel, ), ) // Create a logger with the tee core logger := zap.New(core) // Log info and error messages logger.Info("info log") logger.Error("error log") }</code>
此配置可讓您控制不同日誌等級的寫入位置,為您的日誌記錄策略提供更大的靈活性。
以上是如何使用 uber-go/zap 將訊息日誌傳送到 stdout 並將錯誤/致命日誌傳送到 stderr?的詳細內容。更多資訊請關注PHP中文網其他相關文章!