init project
This commit is contained in:
103
internal/initialize/logger.go
Normal file
103
internal/initialize/logger.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package initialize
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/dungnt11/senflow_app/global"
|
||||
"github.com/natefinch/lumberjack"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// InitLogger khởi tạo logger
|
||||
func InitLogger() *zap.Logger {
|
||||
// Đảm bảo thư mục logs tồn tại
|
||||
ensureLogDir(global.Config.Logger.FileLogName)
|
||||
|
||||
// Khởi tạo logger
|
||||
return newLogger(global.Config.Logger)
|
||||
}
|
||||
|
||||
// ensureLogDir đảm bảo thư mục logs tồn tại
|
||||
func ensureLogDir(logPath string) {
|
||||
// Tìm vị trí thư mục cuối cùng trong đường dẫn
|
||||
lastSlash := 0
|
||||
for i := len(logPath) - 1; i >= 0; i-- {
|
||||
if logPath[i] == '/' {
|
||||
lastSlash = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Nếu không có thư mục, không cần tạo
|
||||
if lastSlash == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
// Tạo thư mục nếu chưa tồn tại
|
||||
dirPath := logPath[:lastSlash]
|
||||
if _, err := os.Stat(dirPath); os.IsNotExist(err) {
|
||||
os.MkdirAll(dirPath, 0755)
|
||||
}
|
||||
}
|
||||
|
||||
// newLogger tạo một logger mới
|
||||
func newLogger(config global.LoggerConfig) *zap.Logger {
|
||||
// Xác định level log
|
||||
var level zapcore.Level
|
||||
switch config.LogLevel {
|
||||
case "debug":
|
||||
level = zapcore.DebugLevel
|
||||
case "info":
|
||||
level = zapcore.InfoLevel
|
||||
case "warn":
|
||||
level = zapcore.WarnLevel
|
||||
case "error":
|
||||
level = zapcore.ErrorLevel
|
||||
default:
|
||||
level = zapcore.InfoLevel
|
||||
}
|
||||
|
||||
// Cấu hình encoder
|
||||
encoder := getEncoder()
|
||||
|
||||
// Cấu hình lumberjack để xoay vòng file log
|
||||
hook := lumberjack.Logger{
|
||||
Filename: config.FileLogName,
|
||||
MaxSize: config.MaxSize, // megabytes
|
||||
MaxBackups: config.MaxBackups,
|
||||
MaxAge: config.MaxAge, // days
|
||||
Compress: config.Compress,
|
||||
}
|
||||
|
||||
// Tạo core cho zap
|
||||
core := zapcore.NewCore(
|
||||
encoder,
|
||||
zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook)),
|
||||
level,
|
||||
)
|
||||
|
||||
// Tạo logger với các tùy chọn
|
||||
return zap.New(core,
|
||||
zap.AddCaller(),
|
||||
zap.AddStacktrace(zapcore.ErrorLevel),
|
||||
)
|
||||
}
|
||||
|
||||
// getEncoder trả về encoder cho zap
|
||||
func getEncoder() zapcore.Encoder {
|
||||
encoderConfig := zap.NewProductionEncoderConfig()
|
||||
|
||||
// Cấu hình thời gian
|
||||
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
||||
encoderConfig.TimeKey = "time"
|
||||
|
||||
// Cấu hình level
|
||||
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||||
|
||||
// Cấu hình caller
|
||||
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
||||
|
||||
// Trả về encoder JSON
|
||||
return zapcore.NewJSONEncoder(encoderConfig)
|
||||
}
|
||||
Reference in New Issue
Block a user