我有一个node.js脚本,它使用WriteStream对文件执行一些日志记录。在某些事件中,我想停止脚本的执行,即警告在此之后立即登录并退出。作为asyncronious node.js中不允许我们这样做直线前进,如:用日志消息退出node.js脚本的正确方法是什么?
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
process.exit(1);
附加消息delme.log这个脚本不做任何处理的文件,而不是。处理“退出”事件和冲洗不起作用。写了这么远之前exitting找到的最后一个日志消息的唯一途径是包装process.exit(1)
在setTimeout()
:
#!/usr/local/bin/node
var fs = require('fs');
var stream = fs.createWriteStream('delme.log', { flags: 'a' });
stream.write('Something bad happened\n');
setTimeout(function(){
process.exit(1);
}, 30);
然而,在这种形式,它不会立即停止执行脚本和脚本将运行一段重大事件发生后的时间。所以我想知道是否有其他方法来退出脚本与日志消息?
谢谢!这是setTimeout()调用的一个变体,它不会阻止脚本执行。如果有一个代码不应该在异常之后执行,这个模式可能会成为一个问题。 – nab 2012-02-08 16:48:35
更新了我的答案。 – fent 2012-02-08 17:56:00
在我的特殊情况下,我使用WriteStream进行日志记录,这样实际的调用将会是log.error('发生了什么坏事'),它会使用适当的日志级别添加其他一些东西来格式化消息。因此,在不改变记录器界面的情况下很难实现此片段。我正在发布我的解决方法作为替代解决方案。最初的问题完全回答。谢谢! – nab 2012-02-08 22:34:48