如果文件不存在则创建文件,然后将日志写入其中
Create file if it does not exist, then write logs to it
尝试建立一个环境:
server.js
:
创建服务器时,它会检查一系列文件是否存在:[api.log、error.log、access.log],如果它们还不存在,它将创建它们。
routes/api.js
:
我可以使用在启动时创建的文件,直到 api 错误,记录错误。
很多建议都围绕 fs.exists() 展开,现在已弃用。
我正在努力拼凑事件的顺序,是否应该 server.js
检查文件,采取相应行动,然后打开流?或者必须 routes/api.js
打开流并在每次出错时写入它?
我正在使用 Node v5.0.0
您永远不应该检查文件是否存在,然后根据文件是否存在来执行某些操作。这是一种反模式:在您检查文件是否存在和执行下一个操作之间,其他一些进程可能会创建或删除文件。 (即使是 *Sync
方法——它们本身就是反模式——也容易受到这个问题的影响。)
相反,您应该做任何您需要做的事情并适当地处理错误。
在这种情况下,您可以通过指定 flags
让 createWriteStream
为您完成工作。您可能想要:
'w'
- Open file for writing. The file is created (if it does not exist) or truncated (if it exists).
'a'
- Open file for appending. The file is created if it does not exist.
实际上,您应该使用 a logging library。
尝试建立一个环境:
server.js
:
创建服务器时,它会检查一系列文件是否存在:[api.log、error.log、access.log],如果它们还不存在,它将创建它们。
routes/api.js
:
我可以使用在启动时创建的文件,直到 api 错误,记录错误。
很多建议都围绕 fs.exists() 展开,现在已弃用。
我正在努力拼凑事件的顺序,是否应该 server.js
检查文件,采取相应行动,然后打开流?或者必须 routes/api.js
打开流并在每次出错时写入它?
我正在使用 Node v5.0.0
您永远不应该检查文件是否存在,然后根据文件是否存在来执行某些操作。这是一种反模式:在您检查文件是否存在和执行下一个操作之间,其他一些进程可能会创建或删除文件。 (即使是 *Sync
方法——它们本身就是反模式——也容易受到这个问题的影响。)
相反,您应该做任何您需要做的事情并适当地处理错误。
在这种情况下,您可以通过指定 flags
让 createWriteStream
为您完成工作。您可能想要:
'w'
- Open file for writing. The file is created (if it does not exist) or truncated (if it exists).'a'
- Open file for appending. The file is created if it does not exist.
实际上,您应该使用 a logging library。