9 библиотек Node.js Logger, которые вы можете попробовать для лучшего ведения журнала

Опубликовано: 2022-09-01

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

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

С другой стороны, интегрированная среда разработки (IDE) не может идентифицировать логические ошибки и ошибки времени выполнения, и их часто трудно отлаживать и исправлять. Устранение ошибок — это трудоемкий процесс, который требует много отладки.

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

Что такое ведение журнала?

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

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

Журнал отладки предоставляет информацию о трассировке стека, параметрах ввода-вывода и т. д. «Подробный» не такой подробный, как журнал «отладки», но дает список всех произошедших событий. Журналы записываются в консоль, файлы и выходной поток. Инструменты управления журналами можно использовать для структурированного и форматированного ведения журналов.

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

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

Промежуточное ПО используется для управления запросами и ответами. Промежуточным ПО может быть приложение или любая другая среда Javascript. Вход в промежуточное ПО может осуществляться через приложения и маршрутизаторы. Любой регистратор Node.js должен использовать команду npm или yarn install для установки регистраторов.

Npm означает «Диспетчер пакетов узлов», а YARN означает «Еще один переговорщик ресурсов». Однако Yarn предпочтительнее npm, так как он быстрее и устанавливает пакеты параллельно.

Некоторые из лучших логгеров Node.js перечислены ниже:

Пино

Pino — это библиотека, которая является одним из лучших регистраторов для приложений Node.js. Он имеет открытый исходный код, чрезвычайно быстр и регистрирует операторы в удобном для чтения формате JSON. Некоторые из уровней журнала Pino: отладка, предупреждение, ошибка и информационные сообщения. Экземпляр регистратора Pino можно импортировать в проект, а операторы console.log должны быть заменены операторами logger.info.

YouTube видео

Используйте следующую команду для установки Pino:

 $ npm install pino

Сгенерированные журналы тщательно проработаны и представлены в формате JSON, с выделением номера строки журнала, типа журнала, времени его регистрации и т. д. Pino вызывает минимальные накладные расходы в приложении и чрезвычайно гибок при обработке журналов.

Pino можно интегрировать с веб-фреймворками, такими как Hapi, Restify, Express и т. д. Журналы, сгенерированные Pino, также можно хранить в файлах. Он использует рабочие потоки для работы и совместим с TypeScript.

Уинстон

Winston поддерживает ведение журналов для различных веб-фреймворков, уделяя основное внимание гибкости и расширяемости. Он поддерживает несколько видов транспорта и может хранить журналы в различных местах файлов. Транспорты — это места, где хранятся сообщения журнала.

Наряду с некоторыми встроенными транспортами, такими как Http, Console, File и Stream, он поддерживает другие транспорты, такие как Cloud Watch и MongoDB. Он ведет регистрацию под различными уровнями и форматами. Уровни ведения журнала указывают на серьезность проблемы.

YouTube видео

Различные уровни ведения журнала показаны ниже:

 { error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

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

Winston также обрабатывает исключения и неперехваченные промисы. Он предоставляет дополнительные функции, такие как регистрация времени выполнения запросов, журналы потоковой передачи и т. Д. Во-первых, необходимо установить Winston. Затем создается конфигурационный объект Winston вместе с транспортом для хранения лога. Объект регистратора создается с помощью функции createLogger(), и ему передается сообщение журнала.

Узел-Буньян

Bunyan используется для быстрого логирования в node.js в формате JSON. Он также предоставляет инструмент CLI (интерфейс командной строки) для просмотра журналов. Он легкий и поддерживает различные среды выполнения, такие как Node.js, Browserify, WebPack и NW.js. Формат журналов JSON дополнительно украшается с помощью красивой функции печати. Журналы имеют различные уровни, такие как фатальные, ошибочные, предупреждающие, информационные, отладочные и трассировочные; каждый связан с числовым значением.

Все уровни выше уровня, установленного для экземпляра, регистрируются. Поток Bunyan — это место, где регистрируются выходные данные. Подкомпоненты приложения могут быть зарегистрированы с помощью функции log.child(). Все дочерние регистраторы привязаны к определенному родительскому приложению. Типом потока может быть файл, вращающийся файл, необработанные данные и т. д. Пример кода для определения потока показан ниже:

 var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });

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

Логуровень

Loglevel используется для ведения журнала в приложениях Javascript. Это также один из лучших регистраторов Node.js, поскольку он легкий и простой. Он регистрирует данный уровень и использует один файл без зависимостей для ведения журнала. Уровень журнала по умолчанию — «предупреждение». Выходные данные журнала хорошо отформатированы вместе с номерами строк. Для ведения журнала используются следующие методы: трассировка, отладка, предупреждение, ошибка и информация.

Они устойчивы к сбоям в любой среде. getLogger() — это метод, используемый для получения объекта регистратора. Его можно комбинировать с другими плагинами, чтобы расширить его возможности. Некоторые из подключаемых модулей включают loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend и DEBUG. Плагин для добавления префиксных сообщений в журнал показан ниже:

 var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

Сборки запускаются с помощью команды npm run dist, а тесты можно запускать с помощью команды npm test. Уровень журнала поддерживает пакеты Webjar, Bower и Atmosphere. Новая версия Loglevel выпускается всякий раз, когда добавляются новые функции.

Сигнал

Signale состоит из 19 регистраторов для приложений Javascript. Он поддерживает TypeScript и ведение журнала с заданной областью. Он состоит из таймеров, которые помогают регистрировать отметку времени, данные и имя файла. Помимо 19 регистраторов, таких как await, complete, fatal, fav, info и т. д., можно создавать собственные журналы.

Пользовательские журналы создаются путем определения объекта JSON и полей с данными регистратора. Также можно создавать интерактивные регистраторы. Когда для интерактивного регистратора установлено значение true, новые значения из интерактивных регистраторов переопределяют старые.

Лучшая часть Signale — это способность отфильтровывать секретную или конфиденциальную информацию. Несколько секретов хранятся в массиве. addSecrets() и clearSecrets() — это функции, используемые для добавления и удаления секретов из массива. Boostnote, Docz, Shower, Taskbook и Vant используют Signale для ведения журнала. Синтаксис вызова API из Signale следующий:

 signale.<logger>(message[,message]|messageObj|errorObj)

На момент написания этой статьи количество загрузок Signale превышает 1 миллион.

Трейсер

Tracer используется для создания подробных сообщений журнала. Сообщения журнала состоят из меток времени, имен файлов, номеров строк и имен методов. Вспомогательные пакеты могут быть установлены для настройки формата выходного журнала. Вспомогательные пакеты можно установить с помощью следующей команды.

 npm install -dev tracer

Tracer поддерживает транспорт файлов, потоков и MongoDB. Он поддерживает цветную консоль и условия фильтрации в журнале. Первоначально трассировщик должен быть установлен с помощью npm install. Во-вторых, необходимо создать объект регистратора и выбрать тип консоли. Затем можно указать различные уровни или типы журнала для объекта для дальнейшего ведения журнала.

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

Кабина.js

Cabin используется для ведения журнала приложений node.js на стороне сервера и клиента. Он используется там, где требуется маскировка чувствительной и критической информации. Сюда входят номера кредитных карт, заголовки BasicAuth, соли, пароли, токены CSRF и номера банковских счетов. Фрагмент кода ниже показывает ведение журнала с помощью Cabin.js.

 const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));

Он состоит из более чем 1600 имен полей. Он также следует принципу «Принеси свой собственный регистратор» (BYOL). Это делает его совместимым с различными другими регистраторами, такими как Axe, Pino, Bunyan, Winston и т. д. Это снижает затраты на хранение на дисках благодаря автоматическим потоковым буферам и буферам Cabin. Он кроссплатформенен и прост в отладке.

Ведение журнала на стороне сервера требует использования промежуточного программного обеспечения для маршрутизации и автоматического ведения журнала выходных данных. Для ведения журнала на стороне браузера требуются запросы и сценарии XHR. Он использует Ax, который отображает метаданные, т. е. данные о данных, трассировку стека и другие ошибки. SHOW_STACK и SHOW_META — логические переменные, для которых установлено значение true или false, чтобы показать или скрыть трассировку стека и метаданные.

нпмлог

Npmlog — это базовый тип регистратора, который использует npm. Некоторые из используемых методов ведения журнала: уровень, запись, maxRecordSize, prefixStyle, заголовок и поток. Он также поддерживает цветную регистрацию. Различные уровни ведения журнала: глупые, подробные, информационные, предупреждающие, http и ошибочные. Пример фрагмента кода для использования журнала npm показан ниже.

 var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

Все сообщения подавляются, если в качестве уровня журнала указано «Бесконечность». Если в качестве уровня журнала указано «-Infinity», для просмотра журналов должна быть включена опция просмотра сообщений журнала.

События и объекты сообщений используются для регистрации. Префиксные сообщения отправляются при использовании префиксных событий. Объекты стиля используются для форматирования журналов, например, для добавления цвета к тексту и фону, стиля шрифта, такого как полужирный, курсив, подчеркивание и т. д. Некоторые пакеты журналов npm — это brolog, npmlogger, npmdate log и т. д.

Рев

Roarr — это регистратор для Node.js, который не требует инициализации и выдает структурированные данные. Он имеет CLI и переменные окружения. Он совместим с браузером. Его можно интегрировать с Fastify, Fastify, Elastic Search и т. д. Он может различать код приложения и код зависимостей. Каждое сообщение журнала состоит из контекста, сообщения, последовательности, времени и версии. Различные уровни журнала включают трассировку, отладку, информацию, предупреждение, ошибку и неустранимый. Пример фрагмента кода, описывающего ведение журнала в Roarr, выглядит следующим образом:

 import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };

Кроме того, можно выполнить сериализацию ошибок, что означает, что экземпляр с ошибкой может быть зарегистрирован вместе с контекстом объекта. Некоторые переменные среды, характерные для Node.js и Roarr, — это ROARR_LOG и ROARR_STREAM. «принять» — это функция, которая используется с node.js для передачи свойств контекста на различные уровни. Дочерние функции также можно использовать с промежуточным программным обеспечением во время ведения журнала.

Заключительные слова

Ведение журнала — это метод отслеживания различных действий и событий во время выполнения программы. Ведение журнала играет жизненно важную роль в отладке кода. Это также помогает повысить читаемость кода. Node.js — это среда выполнения JavaScript с открытым исходным кодом. Некоторые из лучших регистраторов Node.js — Pino, Winston, Bunyan, Signale, Tracer, Npmlog и т. д. Каждый тип регистратора имеет свои собственные функции, такие как профилирование, фильтрация, потоковая передача и транспортировка.

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

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

Вы также можете посмотреть, как установить Node.js и NPM в Windows и macOS.