Рекомендации по асинхронному ведению журнала node.js и необработанным исключениям на сервере - PullRequest
0 голосов
/ 25 сентября 2019

Недавно мы изменили наш код регистрации в файле node.js / Express.js для асинхронной записи в консоль.Однако это связано с тем, что если после инициализации асинхронного кода (и при запуске он выдаст сообщение журнала) синхронный код, запускаемый после этого инициирования, приводит к сбою сервера, то журналы никогда не записываются.

Существует ли установленный шаблон или наилучшая практика для обработки этого, чтобы дисковый ввод-вывод не был блокировщиком для ведения журнала, а в случае необработанного исключения (например, исключения, возникающего в нашем обработчике исключений последнего шанса в Express).js), журналы все равно будут записываться на диск / консоль?

Я думал о запуске отдельного процесса регистрации и межпроцессного взаимодействия, но это кажется чертовски тяжелым, чтобы избежать небольшого количества операций ввода-вывода.О.И я не думаю, что отдельный поток будет работать - не будет ли необработанное исключение node.js, которое отключает сервер, также уничтожить все потоки, запущенные / принадлежащие процессу?(Я не эксперт в этой области.)

Или лучше просто синхронно записать на консоль в нашем логгере и тем самым предотвратить эту ситуацию в первую очередь?

1 Ответ

0 голосов
/ 25 сентября 2019

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

process.on('uncaughtException', err => { logSync(err); exit(errCode); })

Затем синхронно зарегистрируйте исключение с помощью потока или консоли и выйдите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...