我需要在进行 require 调用时捕获调试信息,以找出找不到某些包的原因。
在模块(内部模块.js)中,有几个调试调用,例如:
if (parent) {
debug('looking for %j in %j', id, paths);
}
我需要做些什么来捕获此调试信息?
由于
答案 0 :(得分:2)
debug()
是使用util.debuglog()
创建的函数,这意味着如果设置了正确的环境变量,调试消息将写入stderr
,然后您可以捕获到文件(例如):
env NODE_DEBUG=module node your-app.js 2> debug.log
编辑:要从您自己的应用中捕获这些消息,我认为您必须采用monkeypatching,例如console.error()
let error = console.error.bind(console);
console.error = function() {
if (arguments[1] !== 'MODULE') {
return error.apply(this, arguments);
}
console.log('error log', arguments);
};
此代码需要在您要跟踪的任何require()
语句之前运行,并且它不是非常健壮(如果util.debuglog
的实现发生了变化,它可能会中断)