slogbox
- title
- slogbox
- type
- toolbox
- summary
- slog.Handler, сохраняющий последние N записей в кольцевом буфере и сбрасывающий их при ошибке
- tags
- golang, logging, slog, observability
- language
- Go
- license
- GPL-3.0
- created
- 2026-04-06
- updated
- 2026-04-06
- lang
- ru
- translation_of
- slogbox
- source_updated
- 2026-04-06
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
slog.Handler, который хранит последние N записей логов в кольцевом буфере фиксированного размера. Ноль внешних зависимостей - только стандартная библиотека Go.
Два основных сценария использования:
-
Debug endpoint - отдача недавних логов через HTTP-обработчик на
/debug/logs. Полезно для health check'ов или админок, когда нужно быстро посмотреть недавние события без копания в системах агрегации логов. -
Black box recorder - вдохновлён
runtime/trace.FlightRecorder. Буфер фоном собирает логи, а при поступлении записи уровня error автоматически сбрасывает всё содержимое (включая предшествующий ошибке контекст) в целевой обработчик. Вы бесплатно получаете контекст того, что происходило перед сбоем.
Базовое использование:
rec := slogbox.New(500, nil)
logger := slog.New(rec)
slog.SetDefault(logger)
// expose at /debug/logs
http.Handle("GET /debug/logs", slogbox.HTTPHandler(rec, nil))
Паттерн black box:
rec := slogbox.New(500, &slogbox.Options{
FlushOn: slog.LevelError, // trigger on errors
FlushTo: slog.NewJSONHandler(os.Stderr, nil), // dump context here
MaxAge: 5 * time.Minute, // only recent records
})
logger := slog.New(rec)
logger.Info("request started", "path", "/api/users")
logger.Info("db query", "rows", 42)
logger.Error("query failed", "err", err) // flushes all buffered context
Производительность: 150 ns/op и 1 аллокация на вызов Handle. При GOEXPERIMENT=jsonv2 метод WriteTo использует потоковый JSON - в 4 раза меньше памяти, в 54 раза меньше аллокаций на 100 записях, и до 27 раз быстрее на 10 тыс. записей.
Параметры конфигурации: Level (минимальный сохраняемый уровень), FlushOn (уровень, запускающий сброс), FlushTo (целевой обработчик), MaxAge (исключение устаревших записей при чтении).
Репозиторий: https://github.com/alexrios/slogbox - 19 звёзд, лицензия GPL-3.0.