You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

22 regels
651 B

  1. package logger
  2. import (
  3. "io"
  4. "log/slog"
  5. "os"
  6. )
  7. // CreateLogger creates a logger writing to both stderr and the given file.
  8. // If the file cannot be opened, returns a logger that writes only to stderr and a no-op cleanup.
  9. // Callers can check whether logging to file is active if needed.
  10. func CreateLogger(fname string) (*slog.Logger, func()) {
  11. f, err := os.OpenFile(fname, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
  12. if err != nil {
  13. return slog.New(slog.NewJSONHandler(os.Stderr, nil)), func() {}
  14. }
  15. w := io.MultiWriter(os.Stderr, f)
  16. logger := slog.New(slog.NewJSONHandler(w, nil))
  17. cleanup := func() { f.Close() }
  18. return logger, cleanup
  19. }