2025-11-28 23:30:49 +08:00
|
|
|
|
package logger
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"carrotskin/pkg/config"
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
|
|
|
|
"go.uber.org/zap"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
|
// loggerInstance 全局日志实例
|
|
|
|
|
|
loggerInstance *zap.Logger
|
|
|
|
|
|
// once 确保只初始化一次
|
|
|
|
|
|
once sync.Once
|
|
|
|
|
|
// initError 初始化错误
|
|
|
|
|
|
initError error
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// Init 初始化日志记录器(线程安全,只会执行一次)
|
|
|
|
|
|
func Init(cfg config.LogConfig) error {
|
|
|
|
|
|
once.Do(func() {
|
|
|
|
|
|
loggerInstance, initError = New(cfg)
|
|
|
|
|
|
if initError != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
return initError
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// GetLogger 获取日志实例(线程安全)
|
|
|
|
|
|
func GetLogger() (*zap.Logger, error) {
|
|
|
|
|
|
if loggerInstance == nil {
|
|
|
|
|
|
return nil, fmt.Errorf("日志未初始化,请先调用 logger.Init()")
|
|
|
|
|
|
}
|
|
|
|
|
|
return loggerInstance, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// MustGetLogger 获取日志实例,如果未初始化则panic
|
|
|
|
|
|
func MustGetLogger() *zap.Logger {
|
|
|
|
|
|
logger, err := GetLogger()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
panic(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
return logger
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-12-02 22:52:33 +08:00
|
|
|
|
|