log.go

 1package log
 2
 3import (
 4	"log/slog"
 5	"path/filepath"
 6	"sync"
 7
 8	"github.com/charmbracelet/crush/pkg/config"
 9
10	"gopkg.in/natefinch/lumberjack.v2"
11)
12
13var initOnce sync.Once
14
15func Init(cfg *config.Config) {
16	initOnce.Do(func() {
17		logRotator := &lumberjack.Logger{
18			Filename:   filepath.Join(cfg.Options.DataDirectory, "logs", "crush.log"),
19			MaxSize:    10,    // Max size in MB
20			MaxBackups: 0,     // Number of backups
21			MaxAge:     30,    // Days
22			Compress:   false, // Enable compression
23		}
24
25		level := slog.LevelInfo
26		if cfg.Options.Debug {
27			level = slog.LevelDebug
28		}
29
30		logger := slog.NewJSONHandler(logRotator, &slog.HandlerOptions{
31			Level:     level,
32			AddSource: true,
33		})
34
35		slog.SetDefault(slog.New(logger))
36	})
37}