yjp пре 2 година
родитељ
комит
7c76462eb2
1 измењених фајлова са 20 додато и 19 уклоњено
  1. 20 19
      fslog_instance.go

+ 20 - 19
fslog_instance.go

@@ -7,6 +7,7 @@ import (
 	"gopkg.in/natefinch/lumberjack.v2"
 	"os"
 	"path/filepath"
+	"sync"
 )
 
 const (
@@ -34,32 +35,28 @@ func chooseLoggerLever() zapcore.Level {
 }
 
 var logger *zap.Logger
+var initLoggerOnce sync.Once
 
 const logDir = "logs"
 
-func init() {
-	if !pathExists(logDir) {
-		err := os.MkdirAll(logDir, os.ModeDir|os.ModePerm)
-		if err != nil {
-			panic(err)
+func lazyInitialize() {
+	initLoggerOnce.Do(func() {
+		logFilePath := filepath.Join(logDir, "log")
+		lumberJackLogger := &lumberjack.Logger{
+			Filename: logFilePath,
+			MaxAge:   10,
 		}
-	}
-
-	logFilePath := filepath.Join(logDir, "log")
-	lumberJackLogger := &lumberjack.Logger{
-		Filename: logFilePath,
-		MaxAge:   10,
-	}
 
-	developmentEncoderConfig := zap.NewDevelopmentEncoderConfig()
+		developmentEncoderConfig := zap.NewDevelopmentEncoderConfig()
 
-	encoder := zapcore.NewConsoleEncoder(developmentEncoderConfig)
-	core := zapcore.NewTee(
-		zapcore.NewCore(encoder, zapcore.AddSync(lumberJackLogger), chooseLoggerLever()),
-		zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), chooseLoggerLever()),
-	)
+		encoder := zapcore.NewConsoleEncoder(developmentEncoderConfig)
+		core := zapcore.NewTee(
+			zapcore.NewCore(encoder, zapcore.AddSync(lumberJackLogger), chooseLoggerLever()),
+			zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), chooseLoggerLever()),
+		)
 
-	logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
+		logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
+	})
 }
 
 func GetLogger() *zap.Logger {
@@ -67,19 +64,23 @@ func GetLogger() *zap.Logger {
 }
 
 func Info(message string) {
+	lazyInitialize()
 	logger.Info(message)
 }
 
 func Error(err error) {
+	lazyInitialize()
 	message := fmt.Sprintf("\n%+v\n", err)
 	logger.Error(message)
 }
 
 func Debug(message string) {
+	lazyInitialize()
 	logger.Debug(message)
 }
 
 func Warn(message string) {
+	lazyInitialize()
 	logger.Warn(message)
 }