Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js异步日志记录和未处理的服务器异常的最佳实践_Node.js_Express_Asynchronous_Error Handling - Fatal编程技术网

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

node.js异步日志记录和未处理的服务器异常的最佳实践,node.js,express,asynchronous,error-handling,Node.js,Express,Asynchronous,Error Handling,我们最近更改了node.js/Express.js中的日志代码,以异步方式写入控制台。但是,这会带来一个问题:如果异步代码启动后(运行时会发出日志消息),启动后运行的同步代码会使服务器崩溃,那么日志永远不会写入 是否有一个既定的模式或最佳做法来处理此问题,以便磁盘I/O不是日志记录的拦截器,但如果发生未处理的异常(例如在Express.js中的上次偶然异常处理程序中发生的异常),日志仍将写入磁盘/控制台 我曾考虑过启动一个单独的日志进程并进行进程间通信,但为了避免一点I/O,这感觉非常沉重。而且

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

是否有一个既定的模式或最佳做法来处理此问题,以便磁盘I/O不是日志记录的拦截器,但如果发生未处理的异常(例如在Express.js中的上次偶然异常处理程序中发生的异常),日志仍将写入磁盘/控制台

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


还是在我们的记录器中同步写入控制台更好,从而从一开始就防止这种情况?

您更改的日志代码应该允许您访问底层流。使服务器崩溃的同步代码可能通过引发未捕获的异常来实现。你可以用它来捕捉

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

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

现在您可以这么说了,这非常简单和明显。我明天会试试看。谢谢