lazygophers/log

Go Version Test Coverage Go Report Card License: MIT

Производительная и гибкая библиотека логирования для Go, построенная на zap, которая предоставляет богатые функции и простой API.

📖 Языки документации

✨ Особенности

  • 🚀 Высокая производительность : Построена на zap с повторным использованием объектов Entry через пул, снижая выделение памяти
  • 📊 Богатые уровни логирования : Уровни Trace, Debug, Info, Warn, Error, Fatal, Panic
  • ⚙️ Гибкая конфигурация :
    • Контроль уровня логирования
    • Запись информации о вызывающем
    • Информация трассировки (включая ID горутины)
    • Пользовательские префиксы и суффиксы логов
    • Пользовательские целевые выходы (консоль, файлы и т.д.)
    • Опции форматирования логов
  • 🔄 Ротация файлов : Поддержка ежечасной ротации лог-файлов
  • 🔌 Совместимость с Zap : Безшовная интеграция с zap WriteSyncer
  • 🎯 Простой API : Чистый API, похожий на стандартную библиотеку логирования, легко использовать

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

Установка

go get github.com/lazygophers/log

Базовое использование

package main

import (
    "github.com/lazygophers/log"
)

func main() {
    // Использование глобального логгера по умолчанию
    log.Debug("Отладочное сообщение")
    log.Info("Общее сообщение")
    log.Warn("Предупреждающее сообщение")
    log.Error("Сообщение об ошибке")

    // Использование форматированного вывода
    log.Infof("Пользователь %s успешно вошел", "admin")

    // Пользовательская конфигурация
    customLogger := log.New().
        SetLevel(log.InfoLevel).
        EnableCaller(false).
        SetPrefixMsg("[MyApp]")

    customLogger.Info("Это лог из пользовательского логгера")
}

📚 Продвинутое использование

Пользовательский логгер с выходом в файл

package main

import (
    "os"
    "github.com/lazygophers/log"
)

func main() {
    // Создание логгера с выходом в файл
    logger := log.New().
        SetLevel(log.DebugLevel).
        EnableCaller(true).
        EnableTrace(true).
        SetOutput(os.Stdout, log.GetOutputWriterHourly("/var/log/myapp.log"))

    logger.Debug("Отладочное сообщение с информацией о вызывающем")
    logger.Info("Общее сообщение с информацией о трассировке")
}

Контроль уровня логирования

package main

import "github.com/lazygophers/log"

func main() {
    logger := log.New().SetLevel(log.WarnLevel)

    // Только сообщения warn и выше будут залогированы
    logger.Debug("Это не будет залогировано")  // Игнорировано
    logger.Info("Это не будет залогировано")   // Игнорировано
    logger.Warn("Это будет залогировано")    // Залогировано
    logger.Error("Это будет залогировано")   // Залогировано
}

🔧 Опции конфигурации

Конфигурация Logger

Метод Описание Значение по умолчанию
SetLevel(level) Установить минимальный уровень логирования DebugLevel
EnableCaller(enable) Включить/выключить информацию о вызывающем false
EnableTrace(enable) Включить/выключить информацию о трассировке false
SetCallerDepth(depth) Установить глубину вызывающего 2
SetPrefixMsg(prefix) Установить префикс лога ""
SetSuffixMsg(suffix) Установить суффикс лога ""
SetOutput(writers...) Установить целевые выходы os.Stdout

Уровни логирования

Уровень Описание
TraceLevel Наиболее подробный, для детальной трассировки
DebugLevel Отладочная информация
InfoLevel Общая информация
WarnLevel Предупреждающие сообщения
ErrorLevel Сообщения об ошибках
FatalLevel Фатальные ошибки (вызывает os.Exit(1))
PanicLevel Ошибки паники (вызывает panic())

🏗️ Архитектура

Основные компоненты

  • Logger : Основная структура логирования с настраиваемыми уровнями, выходами, форматировщиками и глубиной вызывающего
  • Entry : Индивидуальная запись лога с полной поддержкой метаданных
  • Level : Определения уровней логирования и вспомогательные функции
  • Format : Интерфейс и реализации форматирования логов

Оптимизации производительности

  • Пул объектов : Повторное использование объектов Entry для снижения выделения памяти
  • Условная запись : Запись дорогих полей только при необходимости
  • Быстрая проверка уровня : Проверка уровня логирования на внешнем уровне
  • Безблоковое проектирование : Большинство операций не требуют блокировки

📊 Сравнение производительности

Характеристика lazygophers/log zap logrus стандартная логирование
Производительность Высокая Высокая Средняя Низкая
Простота API Высокая Средняя Высокая Высокая
Богатство функций Средняя Высокая Высокая Низкая
Гибкость Средняя Высокая Высокая Низкая
Кривая обучения Низкая Средняя Средняя Низкая

🔗 Связанная документация

🚀 Получение помощи

📄 Лицензия

Этот проект лицензирован под лицензией MIT - см. файл LICENSE для деталей.

🤝 Вклад

Мы приветствуем вклады! Пожалуйста, ознакомьтесь с нашим Руководством по вкладу для деталей.


lazygophers/log предназначен для быть решением логирования по умолчанию для разработчиков Go, которые ценят как производительность, так и простоту. Независимо от того, строите ли вы небольшой утилиты или крупную распределенную систему, эта библиотека обеспечивает правильный баланс между функциональностью и удобством использования.