package logger import ( "fmt" "log/slog" "os" "path/filepath" "sync" ) var ( Logger *slog.Logger once sync.Once ) func Init(logFilePath string, logLevel slog.Level) error { logDir := filepath.Dir(logFilePath) if _, err := os.Stat(logDir); os.IsNotExist(err) { err := os.MkdirAll(logDir, 0755) if err != nil { return err } } logFile, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { return err } opts := &slog.HandlerOptions{ Level: logLevel, } fileHandler := slog.NewJSONHandler(logFile, opts) Logger = slog.New(fileHandler) return nil } func GetChildLogger(name string) *slog.Logger { once.Do(func() { configDir, err := os.UserConfigDir() if err != nil { fmt.Printf("error getting User Condfig Dir: %v\n", err) } logDir := filepath.Join(configDir, "jws_gui", "logs") if Logger == nil { defaultLogFilePath := filepath.Join(logDir, "jws_gui.log") defaultLogLevel := slog.LevelInfo Init(defaultLogFilePath, defaultLogLevel) } }) return Logger.With("package", name) }