package main

import (
	"time"

	"go.uber.org/zap"
)

func main() {
	// 1. 创建可调整的日志级别
	atom := zap.NewAtomicLevelAt(zap.InfoLevel)

	// 2. 配置 Logger
	config := zap.Config{
		Level:            atom,
		Development:      false,
		Encoding:         "json",
		OutputPaths:      []string{"stdout"},
		ErrorOutputPaths: []string{"stderr"},
		EncoderConfig:    zap.NewProductionEncoderConfig(),
	}

	logger, _ := config.Build()
	defer logger.Sync()

	// 3. 初始日志级别为 Info
	logger.Debug("Debug message - 1") // 不会输出
	logger.Info("Info message - 1")   // 会输出

	// 4. 动态调整为 Debug 级别
	time.Sleep(1 * time.Second)
	atom.SetLevel(zap.DebugLevel)
	logger.Info("Log level changed to Debug")

	logger.Debug("Debug message - 2") // 现在会输出
	logger.Info("Info message - 2")   // 会输出

	// 5. 动态调整为 Warn 级别
	time.Sleep(1 * time.Second)
	atom.SetLevel(zap.WarnLevel)
	logger.Info("Log level changed to Warn")

	logger.Info("Info message - 3") // 不会输出
	logger.Warn("Warn message - 3") // 会输出
}
