logger.go 1021 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package logger
  2. import (
  3. "log/slog"
  4. "os"
  5. "path/filepath"
  6. "github.com/ayn2op/discordo/internal/consts"
  7. )
  8. type Format int
  9. const (
  10. FormatText Format = iota
  11. FormatJson
  12. )
  13. // Opens the log file and configures default logger.
  14. func Load(format Format, level slog.Level) error {
  15. path, err := os.UserCacheDir()
  16. if err != nil {
  17. return err
  18. }
  19. path = filepath.Join(path, consts.Name)
  20. if err := os.MkdirAll(path, os.ModePerm); err != nil {
  21. return err
  22. }
  23. opts := &slog.HandlerOptions{AddSource: true, Level: level}
  24. var h slog.Handler
  25. switch format {
  26. case FormatText:
  27. path := filepath.Join(path, "logs.txt")
  28. file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  29. if err != nil {
  30. return err
  31. }
  32. h = slog.NewTextHandler(file, opts)
  33. case FormatJson:
  34. path := filepath.Join(path, "logs.jsonl")
  35. file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  36. if err != nil {
  37. return err
  38. }
  39. h = slog.NewJSONHandler(file, opts)
  40. }
  41. slog.SetDefault(slog.New(h))
  42. return nil
  43. }