Node.js:在没有关闭句柄的情况下附加到文件

时间:2014-08-21 22:23:20

标签: node.js

我有博客,用Node.js编写,没有Express ...我想实现访问日志。

我想将日志存储在JSON中。有两个问题:首先,我不想打开文件句柄来访问日志文件,写入它,然后关闭它。我想在服务器启动时打开它,并在关闭服务器时写入并关闭它。可能吗?它真的有效吗?

第二个问题:我想添加新日志而不是写整个文件。日志采用数组的形式。是否有任何方法重写数组的结束括号(]),在其后面添加日志对象并添加]结束?

1 个答案:

答案 0 :(得分:1)

打开文件一次,多次写入

  

首先,我不想打开文件句柄来访问日志文件,写入   它,然后关闭它。我想在服务器启动时打开它,   当我关闭服务器时写入并关闭它。可能吗?   它真的有效吗?

是的,它可行且有效。对您而言,最佳解决方案是open WriteStream一次,然后使用.write() method编写所有数据:

var log = fs.createWriteStream('./my.log', {
  flags: 'a' // Open file for appending. The file is created if it does not exist.
})

log.write('Application started');

比自己处理文件描述符更安全,因为as said in fs.write documentation

  

请注意,在同一文件上多次使用fs.write是不安全的   无需等待回调。对于这种情况,   强烈建议使用fs.createWriteStream


追加文件而不是重写

  

我想附加新日志而不是写整个文件

只需使用追加标记a而不是默认写入标记w。有关详细信息see fs.open docs


追加JSON数组

  

日志采用数组形式。有没有办法重写闭括号   数组(])的用法,在其后面添加日志对象并添加]到结尾?

以这种格式存储日志是一个非常糟糕的主意。

日志记录的整个想法是能够快速将日志吐出到某个日志文件中。您需要编写相当复杂的逻辑来正确删除然后重新创建结束括号]

当然,这是可能的。但不这样做是一个更好的解决方案。