Ведение журнала — это метод ведения записей для будущих целей в цикле разработки программного обеспечения. Ведение журнала имеет решающее значение, поскольку журналы помогают при отладке, диагностике, устранении неполадок и мониторинге проекта.
Вы можете использовать ведение журнала на различных уровнях ваших приложений для ошибок, предупреждений, отладки и многого другого.
Вход в систему
Стандартная библиотека Go содержит журнал пакет с богатым функционалом. Он обрабатывает различные уровни ведения журнала и основные методы ведения журнала, которые вам понадобятся для вашего приложения. Тем не менее журнал package может быть не лучшим выбором, если ваше приложение сложное, и вы хотите отдать приоритет производительности.
журнал package не предоставляет возможности для структурированных журналов. Пакеты структурированного ведения журнала предоставляют функциональные возможности, которые упрощают и улучшают процесс ведения журнала. Экосистема Go содержит множество таких пакетов.
1. Zap от Uber
Зап — это быстрый, структурированный, многоуровневый пакет ведения журналов, созданный командой 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; в Новый Метод возвращает регистратор с аргументами контекста, которые вы предоставляете.
Информация метод возвращает информационное сообщение, а метод Ошибка метод возвращает сообщение об ошибке.
Пишите полезные и понятные журналы
Ведение журнала может быть столь же важным, как и любая другая часть процесса разработки. На начальных этапах это может показаться очень простым, но соблюдение основных практик может усложнить процесс. Чтобы справиться с каждым крайним случаем и аспектом ведения журнала, вы должны использовать пакет ведения журнала, чтобы упростить задачу.
Используйте уровни ведения журнала, структуру и контекст, чтобы сделать ваши журналы понятными и подходящими для их целей.