Заглушить логи

С появлением пакета log/slog в Go 1.21 наконец-то стало возможно нормально вести журналы без использования внешних библиотек.

Если еще не пробовали, то рекомендую простенький туториал и доку, она понятная и с примерами.

log := slog.New(slog.NewTextHandler(os.Stdout, nil))
log.Info("operation", "count", 3, "took", 50*time.Millisecond)
time=2024-12-09T10:20:47.660+00:00 level=INFO msg=operation count=3 took=50ms

Но вообще сказать я хотел не о самом slog, а о том, как в нем заглушить логи (например, для тестов или бенчмарков).

Сделать это несложно — просто используйте io.Discard в качестве приемника для slog.TextHandler:

log := slog.New(slog.NewTextHandler(io.Discard, nil))
log.Info("Prints nothing")

А в Go 1.24 появился еще более простой способ — через slog.DiscardHandler:

log := slog.New(slog.DiscardHandler)
log.Info("Prints nothing")

Вроде и так не особо сложно было, ну да ладно :)

★ Подписывайтесь на новые заметки.