9 бібліотек реєстратора Node.js, які можна спробувати для кращого ведення журналів

| | 0 Comments| 1:11 PM
Categories:

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

Розробка програмного забезпечення проходить кілька етапів: збір вимог, аналіз, кодування, тестування та обслуговування. З усіх цих етапів фаза кодування/розробки вимагає багато часу та зусиль. Інженери програмного забезпечення мають справу з синтаксичними помилками, логічними помилками та помилками виконання. Синтаксичні помилки визначаються під час компіляції та виникають через те, що код не відповідає правилам мови програмування.

З іншого боку, логічні помилки та помилки під час виконання не можуть бути ідентифіковані інтегрованим середовищем розробки (IDE), і їх часто важко налагодити та виправити. Усунення помилок є трудомістким процесом і вимагає багато налагодження.

Налагодження — це процес, у якому намагаються зрозуміти, чому написаний код не працює належним чином. Проблему легко вирішити, коли ми знаємо помилку та точні рядки в коді, де вона сталася. Отже, журналювання дуже корисно для налагодження коду.

Що таке журналювання?

Логування — це техніка, за якої повідомлення фіксуються під час виконання програми. Потрібно реєструвати лише ті повідомлення, які можуть допомогти їм у налагодженні. Отже, знати, коли додавати оператори журналу до коду, надзвичайно важливо. Крім того, не менш важливо розрізняти оператори журналу. Існують різні рівні журналювання, як-от інформація, попередження, помилка, налагодження та докладний. Вирази помилок і попереджень використовуються для обробки винятків.

Дані, які повертаються з функцій, результати після маніпулювання масивами, дані, отримані з API тощо, є деякими прикладами даних, які можна реєструвати за допомогою інформаційних операторів. Для детального опису помилок використовуються журнали налагодження та детальні журнали.

Журнал налагодження надає інформацію про трасування стека, параметри вводу-виводу тощо. «Детальний» не такий детальний, як журнал «налагодження», але містить список усіх подій, які відбулися. Журнали записуються на консоль, файли та вихідний потік. Інструменти керування журналами можна використовувати для структурованого та форматованого журналювання.

Логування Node.js

Nodejs — це середовище виконання JavaScript. Програми Node.js є асинхронними та неблокуючими, і використовуються в системах з інтенсивним об’ємом даних і системах реального часу. Найкращий спосіб дізнатися більше про Node.js — ознайомитися з навчальними посібниками та документацією щодо Node.js. Журналування потрібне для покращення продуктивності, усунення несправностей і відстеження помилок. Вхід у Node.js можна здійснити за допомогою вбудованої функції console.log. Крім того, функція налагодження взаємопов’язана з декількома пакетами та може ефективно використовуватися.

Проміжне програмне забезпечення використовується для керування запитами та відповідями. Проміжним програмним забезпеченням може бути програма або будь-яка інша структура Javascript. Вхід у проміжне програмне забезпечення можна здійснити через програми та маршрутизатори. Будь-який реєстратор Node.js має використовувати команду npm або yarn install для встановлення реєстраторів.

Npm означає «Node Package Manager», а YARN — «Yet Another Resource Negotiator». Однак Yarn є кращим над npm, оскільки він швидший і встановлює пакунки паралельно.

Деякі з найкращих реєстраторів Node.js перераховані нижче:

Піно

Pino — це бібліотека, яка є однією з найкращих реєстраторів для програм Node.js. Це відкритий вихідний код, надзвичайно швидкий і реєструє заяви в зручному для читання форматі JSON. Деякі з рівнів журналу Pino: налагодження, попередження, помилки та інформаційні повідомлення. Примірник Pino logger можна імпортувати в проект, а оператори console.log потрібно замінити операторами logger.info.

  Транскрибуйте відео в текст за допомогою цих 9 найкращих програм

Використовуйте наступну команду для встановлення Pino:

$ npm install pino   

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

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

Вінстон

Winston підтримує журналювання для різних веб-фреймворків, головним чином зосереджуючись на гнучкості та розширюваності. Він підтримує кілька видів транспортування та може зберігати журнали в різних розташуваннях файлів. Транспорти – це місця, де зберігаються повідомлення журналу.

Разом із деякими вбудованими транспортами, такими як Http, Console, File та Stream, він підтримує інші транспорти, такі як Cloud watch і MongoDB. Він веде журналювання на різних рівнях і форматах. Рівні журналювання вказують на серйозність проблеми.

Нижче показано різні рівні реєстрації:

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

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

Вінстон також обробляє винятки та неперехоплені обіцянки. Він надає додаткові функції, такі як файли під час виконання запитів, потокові журнали тощо. По-перше, потрібно встановити 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, включають log-trace, log-warn, log-error, log-info, log-debug і log-fatal. Bunyan використовує серіалізатори для створення журналів у форматі JSON. Функції серіалізатора не створюють винятків і є захисними.

Loglevel

Loglevel використовується для реєстрації в програмах Javascript. Це також один із найкращих реєстраторів Node.js, оскільки він легкий і простий. Він реєструє заданий рівень і використовує один файл без залежностей для журналювання. Рівень журналу за замовчуванням – «попередження». Вихідні дані журналу добре відформатовані разом із номерами рядків. Деякі методи, які використовуються для журналювання: trace, debug, warn, error та info.

  Як скасувати підписку на Tinder Gold

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

Спеціальні журнали створюються шляхом визначення об’єкта 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, також можна використовувати для системного журналювання.

Cabin.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 імен полів. Він також відповідає принципу Bring Your Own Logger (BYOL). Це робить його сумісним з різними іншими реєстраторами, такими як Axe, Pino, Bunyan, Winston тощо. Це зменшує витрати на зберігання на дисках завдяки автоматичному потоку та буферам Cabin. Він сумісний із різними платформами та його легко налагоджувати.

Журналування на стороні сервера вимагає використання проміжного програмного забезпечення для маршрутизації та автоматичного журналювання вихідних даних. Для ведення журналу на стороні браузера потрібні запити XHR і сценарії. Він використовує Axe, який відображає метадані, тобто дані про дані, трасування стека та інші помилки. SHOW_STACK і SHOW_META — це логічні змінні зі значенням true або false, щоб показати або приховати трасування стека та метадані.

  Чи з’явиться картка медичної марихуани під час перевірки справ?

Npmlog

Npmlog — це базовий тип реєстратора, який використовує npm. Деякі з використовуваних методів журналювання: рівень, запис, maxRecordSize, prefixStyle, заголовок і потік. Він також підтримує кольорове журналювання. Різні рівні реєстрації: безглузді, докладні, інформація, попередження, http і помилки. Зразок фрагмента коду для використання журналу npm показано нижче.

var log = require('npmlog')

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

Усі повідомлення пригнічуються, якщо в якості рівня журналу вказано «Infinity». Якщо як рівень журналу вказано «-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. «adopt» — це функція, яка використовується з node.js для передачі властивостей контексту на різні рівні. Дочірні функції також можна використовувати з проміжним програмним забезпеченням під час реєстрації.

Заключні слова

Логування — це метод відстеження різноманітних дій і подій під час виконання програми. Журналування відіграє важливу роль у налагодженні коду. Це також допомагає підвищити читабельність коду. Node.js — це середовище виконання Javascript з відкритим кодом. Одними з найкращих реєстраторів Node.js є Pino, Winston, Bunyan, Signale, Tracer, Npmlog тощо. Кожен тип реєстратора має власні функції, такі як профілювання, фільтрування, потокове передавання та транспортування.

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

Логери також можуть бути інтегровані з іншими програмами та сумісні з кількома браузерами. Завжди доцільно ознайомитися з потребами та програмами, які ви створюєте, перш ніж вибрати тип реєстратора, який ви хочете використовувати.

Ви також можете подивитися, як інсталювати Node.js і NPM на Windows і macOS.