54 lines
1 KiB
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)
|
|
}
|