1
0

logger.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package logger
  2. import (
  3. "context"
  4. "fmt"
  5. "log/slog"
  6. "os"
  7. "github.com/imgproxy/imgproxy/v3/logger/gliblog"
  8. "github.com/imgproxy/imgproxy/v3/logger/syslog"
  9. )
  10. // We store a [Handler] instance here so that we can restore it in [Unmute]
  11. var handler *Handler
  12. // init initializes the default logger
  13. func init() {
  14. cfg := NewDefaultConfig()
  15. handler = NewHandler(os.Stdout, &cfg)
  16. setDefaultHandler(handler)
  17. }
  18. // Init creates a logger and sets it as the default log/slog logger
  19. func Init(config *Config) error {
  20. if err := config.Validate(); err != nil {
  21. return err
  22. }
  23. handler = NewHandler(os.Stdout, config)
  24. setDefaultHandler(handler)
  25. gliblog.Init()
  26. if config.Syslog.Enabled {
  27. slHook, err := syslog.NewHook(&config.Syslog)
  28. if err != nil {
  29. return fmt.Errorf("Unable to connect to syslog daemon: %s", err)
  30. }
  31. if slHook != nil {
  32. AddHook(slHook)
  33. }
  34. }
  35. return nil
  36. }
  37. func AddHook(hook Hook) {
  38. if handler != nil {
  39. handler.AddHook(hook)
  40. }
  41. }
  42. func Fatal(msg string, args ...any) {
  43. slog.Log(context.Background(), LevelCritical, msg, args...)
  44. os.Exit(1)
  45. }
  46. // Mute sets the default logger to a discard logger muting all log output
  47. func Mute() {
  48. setDefaultHandler(slog.DiscardHandler)
  49. }
  50. // Unmute restores the default logger to the one created in [Init]
  51. func Unmute() {
  52. setDefaultHandler(handler)
  53. }
  54. func setDefaultHandler(h slog.Handler) {
  55. slog.SetDefault(slog.New(h))
  56. }