Files
backend/pkg/logger/logger.go
lan 4b4980820f
Some checks failed
SonarQube Analysis / sonarqube (push) Has been cancelled
Test / test (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / build (push) Has been cancelled
chore: 初始化仓库,排除二进制文件和覆盖率文件
2025-11-28 23:30:49 +08:00

69 lines
1.5 KiB
Go

package logger
import (
"os"
"path/filepath"
"carrotskin/pkg/config"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// New 创建新的日志记录器
func New(cfg config.LogConfig) (*zap.Logger, error) {
// 配置日志级别
var level zapcore.Level
switch cfg.Level {
case "debug":
level = zapcore.DebugLevel
case "info":
level = zapcore.InfoLevel
case "warn":
level = zapcore.WarnLevel
case "error":
level = zapcore.ErrorLevel
default:
level = zapcore.InfoLevel
}
// 配置编码器
var encoder zapcore.Encoder
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.TimeKey = "timestamp"
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
if cfg.Format == "console" {
encoder = zapcore.NewConsoleEncoder(encoderConfig)
} else {
encoder = zapcore.NewJSONEncoder(encoderConfig)
}
// 配置输出
var writeSyncer zapcore.WriteSyncer
if cfg.Output == "" || cfg.Output == "stdout" {
writeSyncer = zapcore.AddSync(os.Stdout)
} else {
// 自动创建日志目录
logDir := filepath.Dir(cfg.Output)
if err := os.MkdirAll(logDir, 0755); err != nil {
return nil, err
}
file, err := os.OpenFile(cfg.Output, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
return nil, err
}
writeSyncer = zapcore.AddSync(file)
}
// 创建核心
core := zapcore.NewCore(encoder, writeSyncer, level)
// 创建日志记录器
logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
return logger, nil
}