【发布时间】:2017-09-24 09:41:30
【问题描述】:
我的 Node.js 程序 - 这是一个普通的命令行程序,基本上不会做任何操作上不寻常的事情,没有任何系统特定或异步或类似的事情 - 需要不时将消息写入文件,然后它会被 ^C 打断,它需要文件的内容仍然存在。
我尝试过使用fs.createWriteStream,但结果只是一个 0 字节的文件。 (如果程序通过运行主文件的末尾而结束,则该文件确实包含文本,但这不是我所拥有的场景。)
我尝试过使用winston,但最终根本没有创建文件。 (如果程序通过运行主文件的末尾而结束,则该文件确实包含文本,但这不是我所拥有的场景。)
而fs.writeFile 可以在您预先准备好所有要编写的文本时完美运行,但似乎不支持一次追加一行。
推荐的方法是什么?
编辑:我尝试过的特定代码:
var fs = require('fs')
var log = fs.createWriteStream('test.log')
for (var i = 0; i < 1000000; i++) {
console.log(i)
log.write(i + '\n')
}
运行几秒钟,点击 ^C,留下一个 0 字节的文件。
【问题讨论】:
-
你能分享你尝试过的每个部分的代码吗,这个问题很模糊,没有真正展示你是如何使用 writeStream、winston 等的。
-
createWriteStream应该适用于这种情况。write调用的返回值是多少?如果它返回false,您应该在drain处理程序中进行进一步的写入,或者它只是继续缓冲您对内存的写入。另外,您是否在循环中编写而不释放 CPU?发布一些代码会有所帮助。 -
@Abhishek 好的,为 createWriteStream 添加了特定代码。
-
@Vasan 在不释放 CPU 的情况下在循环中写入,是的,这就是我的程序所做的,它是一个长时间运行的计算工作负载,它不是 Web 服务器或类似的东西。进一步写入排水处理程序 - 我不确定这意味着什么,没有排水处理程序,如果有,程序的其余部分不会位于其中?