package core import ( "fmt" "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" "sundynix-go/core/internal" "sundynix-go/global" "sundynix-go/utils" ) // Zap 函数用于初始化并返回一个 zap.Logger 实例。 // 该函数会检查日志目录是否存在,如果不存在则创建该目录。 // 根据配置中的日志级别,创建对应的 zapcore.Core,并将它们合并为一个 zap.Logger。 // 如果配置中启用了显示行号,则会在日志中添加调用者信息。 // 返回值: // - logger: 初始化后的 zap.Logger 实例,用于记录日志。 func Zap() (logger *zap.Logger) { // 检查日志目录是否存在,如果不存在则创建 if ok, _ := utils.PathExist(global.Config.Zap.Director); !ok { fmt.Printf("日志目录 %v 不存在,创建中...\n", global.Config.Zap.Director) _ = os.Mkdir(global.Config.Zap.Director, os.ModePerm) } // 获取配置中的日志级别,并初始化对应的 zapcore.Core levels := global.Config.Zap.Levels() length := len(levels) cores := make([]zapcore.Core, 0, length) for i := 0; i < length; i++ { core := internal.NewZapCore(levels[i]) cores = append(cores, core) } // 将所有的 zapcore.Core 合并为一个 zap.Logger logger = zap.New(zapcore.NewTee(cores...)) // 如果配置中启用了显示行号,则添加调用者信息 if global.Config.Zap.ShowLine { logger = logger.WithOptions(zap.AddCaller()) } return logger }