Skip to content

DD

DD (в комментариях исходного кода читается как "data-driven" или "distributed debugger") — высокопроизводительная библиотека структурированного логирования от организации CyberGo, обеспечивающая потокобезопасную запись логов, гибкую настройку целей вывода и комплексную защиту безопасности.

Возможности

  • Структурированное логирование -- поддержка типобезопасной записи полей с опциональным выводом в формате JSON
  • Множественные цели вывода -- одновременный вывод в консоль, файл, пользовательский io.Writer
  • Ротация файлов -- автоматическая ротация по размеру с поддержкой ограничения количества резервных копий и политики хранения по времени
  • Фильтрация конфиденциальных данных -- встроенные regex-шаблоны, автоматическое маскирование паролей, ключей, токенов и другой чувствительной информации
  • Валидация полей -- Проверка ключей полей на соответствие соглашениям об именовании (snake_case/camelCase и т.д.) с защитой от инъекций Log4Shell
  • Аудитные логи -- асинхронная запись аудитных событий с поддержкой HMAC-подписей целостности и порядковых номеров
  • Система хуков -- хуки жизненного цикла BeforeLog, AfterLog, OnRotate и другие
  • Интеграция с контекстом -- инструменты context для TraceID/SpanID/RequestID и точка расширения ContextExtractor (методы логирования не принимают ctx, поля необходимо передавать через WithFields)
  • Сэмплирование логов -- опциональная стратегия сэмплирования для сценариев с высокой пропускной способностью
  • Низкоаллокационная оптимизация -- минимизация выделения памяти на горячих путях, превосходная производительность

Установка

bash
go get github.com/cybergodev/dd

Быстрый старт

go
package main

import (
    "time"

    "github.com/cybergodev/dd"
)

func main() {
    // Использование логгера по умолчанию
    dd.Info("Сервис запущен")

    // Структурированный лог
    dd.InfoWith("Запрос обработан",
        dd.String("method", "GET"),
        dd.Int("status", 200),
        dd.Duration("elapsed", 150*time.Millisecond),
    )

    // Создание пользовательского логгера
    logger, _ := dd.New(dd.DefaultConfig())
    defer logger.Close()

    logger.Info("Пользовательский логгер создан")
}

Навигация по модулям

МодульОписание
Основные понятияАрхитектура Logger, конвейер обработки, иерархия интерфейсов
КонфигурацияСтруктура Config, пресеты, цели вывода
Структурированное логированиеКонструкторы полей, цепочные вызовы
Вывод в файл и ротацияFileWriter, BufferedWriter
Фильтрация конфиденциальных данныхАвтоматическое маскирование, уровни безопасности
Валидация полейПроверка соглашений об именовании, защита от Log4Shell
Сэмплирование логовСтратегии снижения объёма логов при высокой нагрузке
Журналирование аудитаАсинхронные аудитные события, подписи целостности
Система хуковРасширение через хуки жизненного цикла
Обработка ошибокСтруктурированные ошибки, sentinel-ошибки, errors.Is
Интеграция распределённой трассировкиTraceID/SpanID/RequestID, ContextExtractor
Руководство по миграцииМиграция с log/slog/zap/logrus

Следующие шаги