Ведение логов является неотъемлемой частью создания современных веб-приложений. Логирование помогает разработчику исследовать различные проблемы приложения и быстро с ними справляться. В противном случае приходится тратить лишнее время на отладку.
В этой статье речь пойдет о пользе ведения логов и различных решениях по логированию для Node.js, помогающих ускорить процесс отладки.
Зачем нужно логирование?
Как уже упоминалось, логирование помогает разработчикам легко отслеживать ошибки в приложениях. Использование рациональных решений по логированию позволяет быстро обнаруживать источники проблем и устранять их.
Кроме того, с помощью уровней логирования можно категоризировать проблемы, возникающие в приложениях. Это позволяет устанавливать приоритетность проблем и решать срочные задачи в первую очередь.
ERROR
, INFO
, DEBUG
, WARN
и FATAL
являются наиболее распространенными уровнями логирования. Это связано с тем, что логи категорий FATAL
и ERROR
требуют немедленного решения, а на исправление логов WARN
можно потратить какое-то время, поскольку они не могут быть источниками блокирующих проблем.
Хотя можно разработать решение по логированию для приложения с нуля, рекомендуется использовать одну из популярных библиотек логирования, настроив ее по своему усмотрению. Этот процесс поможет следовать лучшим практикам и сэкономить драгоценное время. Рассмотрим наиболее часто используемые решения по логированию для приложений Node.js.
1. Winston
Winston — это известная библиотека логирования для Node.js. Она поддерживает универсальное логирование на нескольких транспортировках. Ее можно использовать для маршрутизации логов в другие службы, такие как AWS CloudWatch, graylog2 и даже Sematext Logsene. На GitHub она собрала свыше 18 тысяч звезд, а еженедельно ее скачивают более 7 миллионов раз через NPM.
Особенности
- Отличается простотой использования и настройки.
- Предлагает множество форматов логов.
- Позволяет отправлять и сохранять логи в различных форматах, включая файлы, базы данных, электронную почту и консоли.
- Помогает профилировать блок кода и измерять время, необходимое для его успешного выполнения.
Установка
Winston легко установить с помощью NPM следующим образом:
npm install winston
Использование Winston
После установки библиотеки можно создать с ее помощью логгер следующим образом:
const winston = require('winston'); const logger = winston.createLogger({ level: 'warn', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }), ], });
2. Pino
Pino — еще одна популярная библиотека логирования Node.js, известная возможностью асинхронного логирования. По утверждению разработчиков, она работает более чем в 5 раз быстрее альтернативных библиотек. Pino собрала свыше 9,2 тысяч звезд на GitHub, а еженедельно ее скачивают более 2,8 миллионов раз через NPM.
Особенности
- Использует минимум ресурсов для ведения логов.
- Располагает дочерними логгерами.
- Предлагает печатание и форматирование.
- Считается самым быстрым JSON-логгером.
- Обладает множеством базовых и community-модулей, что способствует формированию процветающей экосистемы.
- Все процессы логирования, известные как транспортировки, выполняются в рабочем потоке, как рекомендует Node.js.
Установка
Pino можно легко установить с помощью NPM следующим образом:
npm install pino
Использование
После установки можно создать новый логгер с помощью Pino и экспортировать его для использования в других файлах.
const pino = require('pino');
module.exports = pino({});
Приведенный выше код возвращает экземпляр логгера, который можно экспортировать и использовать, как показано ниже:
const logger = require('./logger'); logger.info('My Log!');
3. Bunyan
Bunyan — еще одна известная и простая библиотека, предназначенная для ведения логов на Node.js. Она хранит логи в формате JSON и предоставляет CLI-инструмент для их просмотра. Bunyan собрала свыше 6,8 тысяч звезд на GitHub, а еженедельно ее скачивают более 1,6 миллионов раз через NPM.
Особенности
- Предлагает сериализатор для кастомизированного отображения объектов лога.
- Доступна система отслеживания логов на основе DTrace для логов выполнения.
- Среда выполнения поддерживает Node.js, Browserify, Webpack и NW.js.
Установка
Bunyan можно установить с помощью NPM следующим образом:
npm install bunyan
Использование
После установки нужно создать новый логгер с помощью метода createLogger
, как показано ниже:
const bunyan = require('bunyan'); var log = bunyan.createLogger({ name: '<application name', stream: process.stdout }); log.info('Hello world');
4. Log level
Log level — еще одно популярное решение для ведения логов, которое поддерживает как Node.js, так и браузеры. Оно обеспечивает минималистическое, легкое и простое логирование для JavaScript. Log level собрало свыше 2,2 тысяч звезд на GitHub, а еженедельно его скачивают более 9 миллионов раз через NPM.
Особенности
- Отличается удобством и простотой использования.
- Поддерживает Node.js и браузеры.
- Вес Log level составляет 1,1 КБ в минимизированном и GZIP-формате.
- Предлагает фильтрацию по уровню логирования.
- Автоматически возвращается к более простым консольным методам логирования, когда определенные методы недоступны.
- Работает со всеми стандартными системами загрузки JavaScript.
Установка
Log level можно установить с помощью NPM следующим образом:
npm install loglevel
Использование
После установки Log level можно использовать следующими способами.
- В ES6-модулях:
import log from 'loglevel';
log.warn("my log");
- В CommonsJS-модулях:
var log = require('loglevel');
log.warn("my log");
- Непосредственно на веб-страницах:
<script src="loglevel.min.js"></script>
<script>
log.warn("my log");
</script>
5. npmlog
npmlog — базовое и широко используемое решение для ведения логов на Node.js. Это официальный логгер, используемый NPM. Он поддерживает пользовательские уровни и цветной вывод, что делает его более удобным для пользователя. Еженедельно npmlog скачивают более 19 миллионов раз через NPM.
Особенности
- Позволяет устанавливать заголовки логов с использованием пользовательских стилей.
- Поддерживает пользовательские уровни и цветной вывод.
Установка
npmlog можно установить с помощью NPM следующим образом:
npm install npmlog --save
Использование
После установки npmlog можно импортировать и использовать, как показано ниже:
const log = require('npmlog');
log.info('INFO', 'Hello', {'message': 'test'})
Заключение
Теперь вы знаете, зачем нужно вести логи, и сможете использовать различные решения для логирования, доступные для Node.js. Каждая из рассмотренных библиотек имеет свои особенности. Насколько они популярны и как широко используются, можно судить по следующей диаграмме.
Как видите, все вышеперечисленные библиотеки еженедельно загружают более 1 миллиона раз. Библиотека npmlog даже приблизилась к 20 миллионам загрузок. Эти цифры убеждают в важности логирования и показывают, как много людей используют эти инструменты в своих проектах.
Читайте также:
- Использование вебсокетов в промис-стиле
- Меняем Async/Await на Promises.allSettled() для ускорения API-вызовов в Node.JS
- Python или Node.Js: какой язык программирования выбрать?
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Nipuni Arunodi: Logging Solutions for Node.js