如何截取AngularJS$http日志以在页面中显示
我想截取来自AngularJS的控制台日志消息,并将它们显示在页面上的一个div中。我需要它来调试PhoneGap应用程序中的ajax流量 这是我想要捕获的错误类型的一个示例: 我试过了,但没有截获角度错误信息 我还尝试了gameover在答案中提出的解决方案。那也不走运。显然,$http以不同的方式处理错误日志记录。我就是为了这个目的而使用的。我通过创建日志对象如何截取AngularJS$http日志以在页面中显示,angularjs,Angularjs,我想截取来自AngularJS的控制台日志消息,并将它们显示在页面上的一个div中。我需要它来调试PhoneGap应用程序中的ajax流量 这是我想要捕获的错误类型的一个示例: 我试过了,但没有截获角度错误信息 我还尝试了gameover在答案中提出的解决方案。那也不走运。显然,$http以不同的方式处理错误日志记录。我就是为了这个目的而使用的。我通过创建日志对象 var log = log4javascript.getLogger('myApp') log.addAppender(new l
var log = log4javascript.getLogger('myApp')
log.addAppender(new log4javascript.InPageAppender());
然后,我在一个值依赖项中使用它,并在需要的地方挂接它(例如http拦截器)
更轻量级的方法可能是使用$rootScope.emit
,然后在主页上有一个组件,将这些日志消息预先添加到可见的div中,但这需要您更改对console.log的所有调用(或在js中重新定义函数).我想你尝试的答案是正确的,但你忽略了错误的方法。我可以看到angularJs使用了$log
而不是console.log
,因此为了拦截,您可以尝试覆盖它们
大概是这样的:
$scope.$log = {
error: function(msg){document.getElementById("logger").innerHTML(msg)},
info: function(msg){document.getElementById("logger").innerHTML(msg)},
log: function(msg){document.getElementById("logger").innerHTML(msg)},
warn: function(msg){document.getElementById("logger").innerHTML(msg)}
}
确保在导入angular.js
后运行该命令
编辑
其次,在angular.js
文件上重写LogProvider内部类上的consoleLog
方法:
function consoleLog(type) {
var output ="";
//arguments array, you'll need to change this accordingly if you want to
//log arrays, objects etc
forEach(arguments, function(arg) {
output+= arg +" ";
});
document.getElementById("logger").innerHTML(output);
}
我认为AngularJS甚至没有显示此消息。它看起来像是一个在任何JavaScript中都没有捕获到的异常(angular.js只是出现在堆栈顶部,因为它是HTTP请求发送的实际位置)
看一看。这应该是您似乎感兴趣的代码。如果没有,请快速在web上搜索“JavaScript OneError”,它会告诉您如何监视此类错误。我宁愿使用$http。
在responseError函数中,您可以为将暴露于div作用域的服务设置属性。这看起来是一个很好的解决方案,可以满足您自己的日志记录需求。但这并不能回答我的问题。我想捕获错误消息AngularJS本身转储到console.log。是的,我也读过。但问题在于“类似于”。我尝试在应用程序的。运行
方法中注入$log
。但它不起作用。在js文件上花了多一点时间,应该就可以了!看起来很有希望!我通过注入$log
并覆盖错误
,成功了。但是:错误$http
写入控制台(见截图)不是这样截取的。现在已经很晚了,但我相信这可以通过使用decorator扩展$log来解决。