我有一个简单的日志工具来将日志数据写入磁盘,它的工作原理如下:
fs.createWriteStream
创建可写流,使用标记'a'进行追加。这会创建或打开文件,以便我将数据写入。writeStream.write()
将数据写入我的日志文件。这完全有效,除了在这两种情况下:
在这两种情况下,我仍然可以在没有错误的情况下致电writeStream.write()
。
在应用程序运行时修改或删除日志文件后检查我的writeStream
对象会将writeStream.writable
属性显示为true
。每当我致电writeStream.write()
时,writelen
属性会增加,这会让我相信writeStream
认为一切正常,即使不是。
我的问题:
writeStream.write()
停止将数据写入我的文件?我该如何解决?writeStream.write()
停止将数据写入我的文件?我该如何解决?答案 0 :(得分:1)
所有 确定,就写入流而言。当您删除文件时,您实际上删除了目录中的条目,但原始的inode未被删除,并且打开它的应用程序会一直写入磁盘,只有您没有指向它的指针(一个目录),所以无法看到。您会注意到可用磁盘空间不断减少,这会告诉您事情确实已写入。当应用程序关闭文件时,然后被删除(因为没有任何引用指向它),此时可用磁盘空间将再次增加。
您尝试的标准做法是向应用程序发送信号(SIGHUP
或SIGUSR1
),并在信号处理程序中关闭应用并重新打开该文件。这被称为"日志轮换"。有许多节点包可以为您执行此操作,或者您可以自己执行此操作: - )