ведение журнала в Node.js

Логирование можно описать как процесс записи информации в файл журнала, который впоследствии может быть использован для отладки в случае возникновения каких-либо проблем. Ведение журнала является важной частью понимания полного жизненного цикла программы Node.js. От запуска до отладки и добавления новых функций, журналы обеспечивают поддержку путем анализа данных, и мы можем решать ошибки гораздо проще и быстрее, обнаруживая их сразу после возникновения. В Node.js существуют общие уровни протоколирования: error, warn, info, debug. В этой статье мы поговорим о том, как логирование может быть использовано для легкой отладки и о его преимуществах.

Ниже перечислены способы ведения журнала в Node.js:

console.log

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

console.log(level, message)
Вход в полноэкранный режим Выход из полноэкранного режима

Использование библиотеки журналов

Библиотеки протоколирования помогают разработчикам создавать и управлять событиями журнала, что может повысить общую эффективность и функциональность вашего приложения. Одними из самых популярных библиотек протоколирования для Node являются Winston, Pino, Bunyan и Morgan.

Winston

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

const winston = require('winston');
const config = require('./config');

const enumerateErrorFormat = winston.format((info) => {
  if (info instanceof Error) {
    Object.assign(info, { message: info.stack });
  }
  return info;
});

const logger = winston.createLogger({
  level: config.env === 'development' ? 'debug' : 'info',
  format: winston.format.combine(
    enumerateErrorFormat(),
    config.env === 'development' ? winston.format.colorize() : winston.format.uncolorize(),
    winston.format.splat(),
    winston.format.printf(({ level, message }) => `${level}: ${message}`)
  ),
  transports: [
    new winston.transports.Console({
      stderrLevels: ['error'],
    }),
  ],
});

module.exports = logger;
Вход в полноэкранный режим Выход из полноэкранного режима

Pino

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

const pino = require('pino');

// Create a logging instance
const logger = pino({
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
});


logger.info('Application started!');
Войти в полноэкранный режим Выход из полноэкранного режима

Bunyan

Bunyan — еще одна быстрая библиотека для ведения логов JSON, которая поддерживает несколько транспортов и использует CLI для фильтрации логов. В ней есть уточненный метод, который производит то, что они должны делать. Моя любимая функция в Bunyan — поиск журналов, который помогает в отладке сбоев в производстве.

const bunyan = require('bunyan');
const log = bunyan.createLogger({name: 'myapp'});
log.info('My App');


{"name":"myapp","hostname":"banana.local","pid":40161,"level":30,"msg":"My App","time":"2022-04-04T18:24:23.851Z","v":0}
Вход в полноэкранный режим Выход из полноэкранного режима

Другие классные особенности Bunyan — это система потоков для контроля местоположения журналов, поддержка сред, отличных от Node.js, и то, что объекты JSON сериализуются по умолчанию.

Morgan

Логирование запросов в nodejs может быть выполнено с помощью инструмента под названием Morgan, который получает журналы сервера и систематизирует их, чтобы сделать более читабельными.

Чтобы использовать Morgan, просто задайте строку формата:

const morgan = require('morgan');
app.use(morgan('dev'));
Войти в полноэкранный режим Выйти из полноэкранного режима

Система управления журналами

В зависимости от того, насколько велико ваше приложение, может оказаться полезным извлечь журналы из приложения и управлять ими отдельно с помощью системы управления журналами.
Системы управления журналами позволяют отслеживать и анализировать журналы по мере их возникновения в режиме реального времени, что, в свою очередь, может помочь улучшить ваш код. Система управления журналами поможет вам отслеживать полезные данные, включая ошибки бэкенда, аномалии, источники журналов и производственные ошибки.
В качестве инструментов анализа и управления журналами я рекомендую Sentry, Loggly, McAfee Enterprise, Graylog, Splunk, Logmatic или Logstash.

Инструменты мониторинга здоровья

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

Ниже приведены несколько популярных инструментов мониторинга для Node.js:

  • PM2
  • Sematext
  • App Metrics
  • ClinicJS
  • AppSignal

Заключение

Для оптимального ведения журналов и мониторинга в Node.js лучше всего выбрать библиотеку, которая соответствует вашим потребностям. Также будет здорово, если вы будете следовать некоторым лучшим практикам протоколирования, чтобы получить максимальную выгоду, поскольку они являются лучшим другом инженеров-программистов. Не записывайте в журнал важную информацию, например, данные кредитной карты пользователя, и будьте внимательны к тому, что вы записываете в журнал.
Старайтесь регистрировать все, что, по вашему мнению, может быть использовано в дальнейшем. Очевидно, что вы разберетесь с этими вещами, когда дело дойдет до дела, но постарайтесь начать с минимума.

Спасибо.🙂👍

Оцените статью
devanswers.ru
Добавить комментарий