69 lines
1.5 KiB
Go
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
|
|
}
|