jws/internal/logger/logger.go

54 lines
1 KiB
Go

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)
}