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

В этой статье речь пойдет о пользе ведения логов и различных решениях по логированию для 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 миллионам загрузок. Эти цифры убеждают в важности логирования и показывают, как много людей используют эти инструменты в своих проектах.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Nipuni Arunodi: Logging Solutions for Node.js

Предыдущая статьяКак построить масштабируемый API на Go с помощью Gin
Следующая статьяМетод SHAP для категориальных признаков