【发布时间】:2017-03-15 22:24:43
【问题描述】:
NodeJS 是异步的,例如,如果运行 Express 服务器,可能正在处理一个请求,记录它,然后开始处理另一个请求并尝试在第一个请求完成之前记录它。
由于这些是日志文件,因此不是简单的写入。即使写入是原子的,也可能另一个进程实际上会在原始进程即将写入的偏移处结束写入并最终覆盖。
有一个同步追加功能(fs.appendFile),但这需要我们延迟服务请求以等待日志文件写入完成,我仍然不确定这是否能保证原子追加。在确保原子性的同时在 NodeJS 中写入日志文件的最佳做法是什么?
【问题讨论】:
-
npm 上有几个原子写入包,仅供参考(不确定它们是否能解决您的问题)。 npmjs.com/search?q=atomic%20write
-
在请求开始时生成一个 guid,并在每个日志条目开始时将其写出。这意味着在整个应用程序中传递上下文,但这并不难。在 Java 中,这称为映射诊断上下文 (MDC)。
标签: node.js