EnglishРусский Map

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.

Два основных сценария использования:

  1. Debug endpoint - отдача недавних логов через HTTP-обработчик на /debug/logs. Полезно для health check'ов или админок, когда нужно быстро посмотреть недавние события без копания в системах агрегации логов.

  2. 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.