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}