自动附加到nodejs中的日志文件

NodeJS是asynchronous的,因此,例如,如果运行一个Express服务器,则可能正在服务一个请求,logging它,然后开始服务另一个请求,并尝试在第一个请求完成之前logging它。

由于这些是日志文件,这不是一个简单的写。 即使写入是primefaces化的,也许另一个过程实际上是在原始过程即将到来的偏移量处写入,并且结束覆盖。

有一个同步附加function(fs.appendFile),但这将需要我们延迟服务请求等待日志文件写入完成,我仍然不知道如果这保证了primefaces追加。 在确保primefaces性的同时,写入NodeJS中的日志文件的最佳做法是什么?

一个可能正在服务一个请求,logging它,然后开始服务另一个请求,并尝试在第一个请求完成之前logging它。

单独的write调用将是primefaces的,所以只要您为每个请求进行一次日志write调用,就不会有任何日志消息的损坏。 但是,如果您在处理请求时logging多个消息,那么在多个不同的并发请求之间进行交叉处理是正常的。 每条消息都是完整的,但是它们按照时间顺序在日志文件中,而不是按请求分组。 没事儿。 如果您想单独执行一个请求,则可以对请求UUID进行过滤。

即使写入是primefaces化的,也许另一个过程实际上是在原始过程即将到来的偏移量处写入,并且结束覆盖。

不要让多个进程写入相同的文件或日志。 使用process.stdout ,一切都会好的。 或者,如果您真的想直接login到文件系统,请使用独占locking机制。

在确保primefaces性的同时,写入NodeJS中的日志文件的最佳做法是什么?

process.stdout ,每个连贯的日志消息一个write调用。 你可以让你的进程pipe理员(systemd或upstart)为你写日志,或者使用诸如multilog,sysvlogd之类的日志pipe理器,把你的stdout传给他们,让他们处理写入磁盘。