package initialization

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
	"testData/global"
	"time"
)

func InitLogger() {
	writeSyncer := getLogWriter()
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
	// 显示日志发生的代码行号
	//logger := zap.New(core, zap.AddCaller())
	// 不显示日志发生的代码行号
	logger := zap.New(core)
	global.Log = logger.Sugar()
}

func getEncoder() zapcore.Encoder {
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = func(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
		encoder.AppendString(t.Format("2006-01-02 15:04:05"))
	}
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
	return zapcore.NewConsoleEncoder(encoderConfig)
}

func getLogWriter() zapcore.WriteSyncer {
	lumberJackLogger := &lumberjack.Logger{
		Filename:   "./log/message.log", // 日志文件路径
		MaxSize:    1,                   // 每个日志文件保存最大尺寸,单位 M
		MaxBackups: 15,                  // 日志最多保存多少个备份
		MaxAge:     30,                  // 文件最多保存多少天
		Compress:   false,               // 是否压缩
		LocalTime:  true,                // 是否使用本地时间
	}
	defer lumberJackLogger.Close()
	// 日志输出至console和文件
	return zapcore.NewMultiWriteSyncer(
		zapcore.AddSync(lumberJackLogger),
		zapcore.AddSync(os.Stdout),
	)
	// 日志只输出到文件
	//return zapcore.AddSync(lumberJackLogger)
}
