|
Зачем инициализировать эмитер в логгере, если эмитер уже создается в транспорте |
Replies: 1 comment
|
1) Транспортные эмиторы сообщают об ивентах логгеру. Логгер точно также должен уведомлять внешнюю среду о своих событиях. Например, если один из транспортов умер - логгер сначала его перезапустит, а в случае неудачи отправит событие во внешнюю среду и закроется. Если этого не делать, внешняя среда никак не узнает о состоянии логгера. Вторым решением может быть передача хуков onError, onOpen и тд, как в логгер, так и из API трансорта. let logger = new Logger(opts);
let fatalCounter = 0;
logger.on('died-transport', async (transports) => {
fatalCounter++;
if(!('fs' in transports) || fatalCounter > 0) return;
logger.close();
logger = new Logger(opts);
});
logger.on('fatal', () => {
fatalCounter++;
logger.removeAllListeners();
if(fatalCounter > 0) return;
logger = new Logger(opts);
})2) При создания стрима, стрим не открывается мгновенно для записи / чтения, в данном случае ты должен подожать момента, когда стрим отправит событие open и только потом начать что-то туда писать. // async open ()
stream.on('ready', () => void bridge.emit('open')); // Можешь слушать open
await events.once(bridge, open);Также, это частично ответ на первый вопрос, при ротации (переоткрытии логгера), может произойти ошибка, но логгер её уже никак не сможет обработать, если не дернуть внешний обработчик, так как процесс выполнения уже перейдёт в другую часть программы (выйдет за блок catch). Дёргать что-то из логгера в транспорте или же отправлять событие тут уже тебе решать. 3 / 4) Что касается проверки папки, этот функцианал реализован в astropack, PS: Так как ты имеешь дело с ассинхронным API - все ошибки должны быть обработаны. |
1) Транспортные эмиторы сообщают об ивентах логгеру. Логгер точно также должен уведомлять внешнюю среду о своих событиях. Например, если один из транспортов умер - логгер сначала его перезапустит, а в случае неудачи отправит событие во внешнюю среду и закроется. Если этого не делать, внешняя среда никак не узнает о состоянии логгера. Вторым решением может быть передача хуков onError, onOpen и тд, как в логгер, так и из API трансорта.