如果文件不存在则创建文件,然后将日志写入其中
Posted
技术标签:
【中文标题】如果文件不存在则创建文件,然后将日志写入其中【英文标题】:Create file if it does not exist, then write logs to it 【发布时间】:2016-06-04 15:59:10 【问题描述】:尝试建立一个环境:
server.js
:
服务器创建时会检查一系列文件是否存在:[api.log, error.log, access.log],如果不存在则创建。
routes/api.js
:
我可以使用启动时创建的文件来记录 api 错误。
很多建议都围绕着fs.exists(),现在已弃用。
我正在努力拼凑事件的顺序,server.js
是否应该检查文件,采取相应措施,然后打开一个流?或者必须routes/api.js
打开流并在每个错误时写入它?
我正在使用 Node v5.0.0
【问题讨论】:
fs.statSync
怎么样? ***.com/a/4482701/4989460
@stdob-- 这就是我将用于检查的内容,关于我如何使用它的任何想法?是否像在 createWriteStream 中引用文件一样简单?现在我可以确保文件已创建?
好的,我明白了。鉴于日志文件可以同时从不同的函数写入,最好创建一个类型为“logger”的对象 - 例如,winston
[github.com/winstonjs/…]。
【参考方案1】:
您永远不应该检查文件是否存在,然后根据文件是否存在来做某事。这是一种反模式:在您检查文件是否存在和执行下一个操作之间,其他一些进程可能会创建或删除文件。 (即使是 *Sync
方法——它们本身就是反模式——也容易受到这个问题的影响。)
相反,您应该做任何您需要做的事情并适当地处理错误。
在这种情况下,您可以通过指定flags
让createWriteStream
为您完成工作。您可能想要:
'w'
- 打开文件进行写入。文件被创建(如果不存在)或被截断(如果存在)。'a'
- 打开文件进行追加。如果文件不存在,则创建该文件。
实际上,您应该使用a logging library。
【讨论】:
现在很明显,温斯顿是前进的合适方式,谢谢。以上是关于如果文件不存在则创建文件,然后将日志写入其中的主要内容,如果未能解决你的问题,请参考以下文章