Ведение журнала — это метод ведения записей для будущих целей в цикле разработки программного обеспечения. Ведение журнала имеет решающее значение, поскольку журналы помогают при отладке, диагностике, устранении неполадок и мониторинге проекта.

Вы можете использовать ведение журнала на различных уровнях ваших приложений для ошибок, предупреждений, отладки и многого другого.

Вход в систему

Стандартная библиотека Go содержит журнал пакет с богатым функционалом. Он обрабатывает различные уровни ведения журнала и основные методы ведения журнала, которые вам понадобятся для вашего приложения. Тем не менее журнал package может быть не лучшим выбором, если ваше приложение сложное, и вы хотите отдать приоритет производительности.

журнал package не предоставляет возможности для структурированных журналов. Пакеты структурированного ведения журнала предоставляют функциональные возможности, которые упрощают и улучшают процесс ведения журнала. Экосистема Go содержит множество таких пакетов.

1. Zap от Uber

instagram viewer

Зап — это быстрый, структурированный, многоуровневый пакет ведения журналов, созданный командой Uber с открытым исходным кодом для ведения журналов в Go. Убер создал пакет Zap, чтобы обеспечить более эффективное ведение журнала, чем другие пакеты в экосистеме Go, включая журнал упаковка.

В пакете Zap есть два разных регистратора. Регистратор Функция обрабатывает критические случаи производительности. SugaredLogger предлагает большую гибкость благодаря своему API-интерфейсу в стиле printf, но имеет небольшой компромисс в производительности. Даже более медленный пакет SugaredLogger в 4-10 раз быстрее, чем другие пакеты структурированного ведения журналов.

Запустите в командной строке следующее, чтобы установить пакет Zap:

идти получить -у идти.uber.org/zap

Вам понадобится последняя версия Go, чтобы установить и успешно использовать функциональные возможности пакета Zap.

регистратор, ошибка := зап. Новое Производство () // экземпляр регистратора zap

если ошибся != ноль {
ФМТ. Распечатать (ошиб. Ошибка())
}

откладывать регистратор. Синхронизировать() // сбрасывает буферы, если они есть
сахар := регистратор. Сахар() //засахаренный регистратор здесь

сахар. Infow("Не удалось получить URL",
// Структурированный контекст в виде свободно типизированных пар ключ-значение.
"адрес", адрес,
"пытаться", 3,
«откат», время. Второй,
)

сахар. Infof("Не удалось получить URL: %s", URL) // используя средство форматирования в стиле printf

регистратор переменная является экземпляром разряд регистратор и Сахар method является подслащенным экземпляром регистратора.

Информация метод записывает в вывод, а Информация это версия форматирования Информация метод.

2. Пакет Логрус

Логрус — это пакет структурированного ведения журналов для приложений Go. Логрус совместим со стандартным библиотечным логгером с аналогичной функциональностью. Если у вас есть опыт использования журнал package, вы найдете пакет, работающий с Logrus.

Логрус по умолчанию не поддерживает форматирование JSON. Но вы всегда можете использовать библиотеку JSON, например встроенную json пакет с Логрусом СетФорматтер метод.

Logrus поддерживает ведение журналов на разных уровнях, и, хотя он не так эффективен, как большинство пакетов ведения журналов, он многофункционален и безопасен.

Вы можете использовать эту команду для установки Logrus в свой рабочий каталог:

идти получить github.com/sirupsen/logrus

Вот пример ведения журнала с помощью пакета Logrus.

импорт (
"Операционные системы"
журнал "github.com/sirupsen/logrus" // импорт псевдонимов
)

функцияглавный {
журнал. УстановитьФорматтер(&лог. JSONФорматтер{}) // устанавливаем средство форматирования в JSON
журнал. SetOutput (ос. Стандартный) // вывод на стандартный вывод
журнал. Установить уровень (лог. уровень предупреждения) // устанавливаем уровень предупреждения

журнал. С полями (лог. Поля{
«Имя»: «Джон Доу»,
"Возраст": 40,
}).Info("Биоданные Джона")
}

Этот код импортирует библиотеку Logrus и создает для нее псевдоним с именем журнал. в главный функция, она вызывает СетФорматтер способ установить средство форматирования для журналов. Вы можете использовать SetOutput способ указать, куда должны отправляться сообщения журнала; в этом случае стандартный вывод.

SetLevel метод регистрирует предупреждения указанного уровня или выше.

3. Пакет ZeroLog

Зерлог — это вдохновленная Zap, быстрая, специализированная JSON-библиотека для ведения журналов, разработанная для повышения производительности. Он использует уникальный API цепочки, который позволяет Zerolog записывать JSON и регистрировать события без выделения и отражения.

Zerolog стремится предоставить более простой в использовании API и более высокую производительность, сохраняя при этом простоту кодовой базы и API. Он ориентирован на структурированное ведение журнала, и вы можете использовать ConsoleWriter метод для красивой регистрации на вашей консоли.

В пакете Zerolog есть низкое распределение, уровневое ведение журнала, выборка, перехватчики, контекстные поля и ведение журнала ошибок с дополнительными функциями трассировки стека. Вы также можете интегрировать Zerolog с контекст а также http пакеты.

Запустите эту команду в терминале вашей рабочей области, чтобы установить Зеролог упаковка.

идти получить -u [github.com/rs/zerolog/log](http://github.com/rs/zerolog/log)

Вот простой пример использования пакета Zerolog для простой операции.

импорт (
"github.com/rs/zerolog" // нулевой журнал для конфигов
"github.com/rs/zerolog/журнал" // лог для логирования
)

функцияглавный() {
// Время UNIX быстрее и меньше, чем большинство меток времени
нуллог. TimeFieldFormat = нольлог. ВремяФорматUnix

журнал. Распечатать("привет мир")
}

TimeFieldFormat параметр установлен в формат времени Unix, а Распечатать Команда записывает текстовый аргумент в стандартный вывод.

4. Пакет Log15

Журнал15 package — это простой набор инструментов для ведения журналов, читаемых человеком и машиной, с лучшими практиками в Go. Log15 моделирует ио а также http пакеты из стандартной библиотеки Go в качестве альтернативы встроенному журнал упаковка.

Особенности пакета Log15 включают в себя:

  • простой и понятный API
  • структурированное ведение журнала с парами ключ-значение
  • дочерние регистраторы с частным контекстом
  • интерфейс обработчика для создания пользовательских конфигураций ведения журнала через крошечный API
  • цветная терминальная поддержка
  • встроенная поддержка ведения журналов в файлы, потоки, системные журналы и сетевые журналы
  • буферизация записей для вывода.

Вы можете установить Журнал15 к вашим пакетам Go с помощью этой команды.

идти получить github.com/inconshreveable/log15

Начать работу с пакетом Log15 легко. Вот пример создания регистратора и регистрации информации и уровней ошибок с помощью пакета.

импорт (
журнал "github.com/inconshreveable/log15" // импорт псевдонимов как журнал
)

функцияглавный() {
серверлог := лог. Новый("Репозиторий", "новый репозиторий") // создание регистратора
журнал сервера. Info("Проверка работоспособности слоя репозитория прошла успешно") // информационный журнал
журнал сервера. Ошибка («Проверка работоспособности слоя репозитория не удалась») // журнал ошибок
}

серверЖурнал переменная — экземпляр логгера Log15; в Новый Метод возвращает регистратор с аргументами контекста, которые вы предоставляете.

Информация метод возвращает информационное сообщение, а метод Ошибка метод возвращает сообщение об ошибке.

Пишите полезные и понятные журналы

Ведение журнала может быть столь же важным, как и любая другая часть процесса разработки. На начальных этапах это может показаться очень простым, но соблюдение основных практик может усложнить процесс. Чтобы справиться с каждым крайним случаем и аспектом ведения журнала, вы должны использовать пакет ведения журнала, чтобы упростить задачу.

Используйте уровни ведения журнала, структуру и контекст, чтобы сделать ваши журналы понятными и подходящими для их целей.