Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

22 linhas
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. }