Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 April 05

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Aleksandr Perepichai
Как в модулях логировать ошибки? Использую winston. Нужно в каждом модуле прописывать логгер?
Для початку варто було б в окремому файлі створити інстанс логгера і експортувати його, щоб використовувати всюди. Бо для кожного модуля створювати свій інстанс - не завжди виправдано. Хіба що різні конфігурації потрібні.
Який фреймворк використовуєте (якщо використовуєте взагалі)?
источник

AP

Aleksandr Perepichai in NodeUA - JavaScript and Node.js in Ukraine
Кай
Для початку варто було б в окремому файлі створити інстанс логгера і експортувати його, щоб використовувати всюди. Бо для кожного модуля створювати свій інстанс - не завжди виправдано. Хіба що різні конфігурації потрібні.
Який фреймворк використовуєте (якщо використовуєте взагалі)?
Вінстон, я так зробив і імпортував в app.js
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Для прикладу, можна створити ErrorHandler з методами, що відповідають за обробку конкретних помилок і при виникненні помилок передавати їв в цей Handler. В самому Handler ви зможете виконувати всі потрібні дії над помилками в залежності (чи незалежно) від їх типу.
Хороша практика - обробляти помилки в одному місці.
источник

AP

Aleksandr Perepichai in NodeUA - JavaScript and Node.js in Ukraine
Чи його треба імпортувати тепер в кожен модуль?
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Ви можете написати ErrorHandler і в ньому використовувати Winston. І при помилці ви будете викликати метод Handler-а.
источник

AP

Aleksandr Perepichai in NodeUA - JavaScript and Node.js in Ukraine
Кай
Ви можете написати ErrorHandler і в ньому використовувати Winston. І при помилці ви будете викликати метод Handler-а.
Дякую за підказки
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
// ErrorHandler.js
const logger = require("path-to-logger");

class ErrorHandler {
 static handleErrorOne(error) {
   logger.error("Oh no, the error!");
 }

 static handleErrorTwo(error) {
   logger.error("So many errors :C");
 }
}

// anotherFile.js
const ErrorHandler = require("path-to-error-handler");

function typicalMethod(arg1, agr2) {
 try {
   methodThatPotentiallyThrowsError();
 } catch (error) {
   ErrorHandler.handleErrorOne(error);
 }
}
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Це ще додатково можна написати "правильно" (з експортами і т. д.), тут загальний приклад, який може показати ідею.
Maxim слушно зазначив відносно обробки помилок на верхньому рівні. Так теж можна робити, якщо помилки загальні. Для специфічних помилок можна створити кастомні класи, але в загальній практиці бажано використовувати стандартний Error.
При бажанні можете поглянути тут . Можливо це дасть вам певні ідеї, як це можна зробити краще.
источник

AP

Aleksandr Perepichai in NodeUA - JavaScript and Node.js in Ukraine
Супер, дякую
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Aleksandr Perepichai
Как в модулях логировать ошибки? Использую winston. Нужно в каждом модуле прописывать логгер?
Винстон к чертям, возьмите pino
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Винстон к чертям, возьмите pino
Чому pino?
Через швидкість, "асинхронність" чи щось інше?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Кай
Чому pino?
Через швидкість, "асинхронність" чи щось інше?
Потому что логи не должны обрабатываться внутри приложения, что и позволяет пино.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Кай
Чому pino?
Через швидкість, "асинхронність" чи щось інше?
Это современный и качество код, в первую очередь, его пишут приличные люди, а винстон родом из 10 лет назад, и не изменялся концептуально
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Зрозумів, дякую за відповідь.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Ну и весит пино вместе с зависимостями 1.7мб, а винстон 15мб
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Потому что логи не должны обрабатываться внутри приложения, что и позволяет пино.
Мається на увазі всередині процесу самого, чи саме про застосунок йде мова?
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Ну и весит пино вместе с зависимостями 1.7мб, а винстон 15мб
Єдиною причиною, чому я вибрав winston свого часу - на проекті TypeScript і потрібно було Transport для виводу в файли, що в різних місцях розташовані. А (можливо не так прочитав) Pino нативно не підтримував (чи не підтримує) такого.
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Кай
Мається на увазі всередині процесу самого, чи саме про застосунок йде мова?
все зависит от того, что вы называете процессом
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Alexander
все зависит от того, что вы называете процессом
nodejs process?
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Кай
nodejs process?
в таком контексте приложение и процесс у вас это одно и то же
источник