package main

import (
	"os"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func main() {
	// 1. 配置 Encoder
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder // 带颜色的级别

	// 2. 控制台输出（console 格式）
	consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig)
	consoleOutput := zapcore.AddSync(os.Stdout)

	// 3. 文件输出（json 格式）
	fileEncoder := zapcore.NewJSONEncoder(encoderConfig)
	file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
	fileOutput := zapcore.AddSync(file)

	// 4. 创建多输出 Core
	core := zapcore.NewTee(
		zapcore.NewCore(consoleEncoder, consoleOutput, zap.InfoLevel),
		zapcore.NewCore(fileEncoder, fileOutput, zap.InfoLevel),
	)

	// 5. 创建 Logger
	logger := zap.New(core, zap.AddCaller())
	defer logger.Sync()

	// 6. 使用 Logger
	logger.Info("Application started")
	logger.Warn("This is a warning")
	logger.Error("This is an error")
}
