package logger import ( "io" "log/slog" "os" ) // CreateLogger creates a logger writing to both stderr and the given file. // If the file cannot be opened, returns a logger that writes only to stderr and a no-op cleanup. // Callers can check whether logging to file is active if needed. func CreateLogger(fname string) (*slog.Logger, func()) { f, err := os.OpenFile(fname, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { return slog.New(slog.NewJSONHandler(os.Stderr, nil)), func() {} } w := io.MultiWriter(os.Stderr, f) logger := slog.New(slog.NewJSONHandler(w, nil)) cleanup := func() { f.Close() } return logger, cleanup }