我有一个使用Winston日志库的节点应用程序,它在Winston文件传输代码中调用fs.stat失败。有问题的代码是(第515-536行附近的file.js):
console.log("fullname = " + fullname);
fs.stat(fullname, function (err, stats) {
console.log("CALLBACK");
if (err) {
if (err.code !== 'ENOENT') {
return self.emit('error', err);
}
return createAndFlush(0);
}
if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
//
// If `stats.size` is greater than the `maxsize` for
// this instance then try again
//
return checkFile(self._getFile(true));
}
createAndFlush(stats.size);
});
我添加了console.log调用。第一个打印在第一个记录事件,但第二个从未到达。
应用程序在Windows 7 32位上的Node.js 0.10.10下运行。它适用于Linux。 应用程序的http服务器继续为事件提供服务,因此主事件循环正常。
以下简短应用程序对于存在的文件和不存在的文件正确运行:
fs = require('fs');
fs.stat('c:\\apiserver\\v8.log', function(err, st) {
console.dir(err);
console.dir(st);
});
答案 0 :(得分:0)
在域的错误处理程序中发生日志调用时,似乎会出现此问题。域名是实验性的,所以我想我不应该太惊讶。修复是显式捕获错误(在这种情况下由JSON.parse(“垃圾文本”)引起)并从catch块调用日志。对日志的调用仍然在域的范围内,因此本身不是问题。