Node.js异步日志记录和未处理的服务器异常的最佳实践

时间:2019-09-24 22:15:32

标签: node.js express asynchronous error-handling

我们最近更改了node.js / Express.js中的日志记录代码,以异步方式写入控制台。但是,这带来了一个问题,即如果启动异步代码后(当异步代码运行时,它将发出一条日志消息),而在启动异步代码后运行的同步代码使服务器崩溃,则永远不会写入日志。

是否存在确定的模式或最佳实践来进行处理,以使磁盘I / O不会成为日志记录的阻止程序,而是在发生未处理的异常(例如在Express中我们的最后一次异常处理程序中发生异常)时.js),日志是否仍将写入磁盘/控制台?

我曾考虑过要启动一个单独的日志记录进程并进行进程间通信,但是为了避免一点点I / O,这感觉实在太累了。而且我认为没有单独的线程会起作用-导致服务器宕机的node.js未处理异常是否也会杀死该进程启动/拥有的所有线程? (我不是这方面的专家。)

还是在记录器中同步写入控制台更好,从而首先避免这种情况?

1 个答案:

答案 0 :(得分:0)

您更改的日志记录代码应使您可以访问基础流。使服务器崩溃的同步代码很可能是通过引发未捕获的异常来实现的。您可以使用的

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

然后使用流或控制台同步记录异常并退出。