Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何截取AngularJS$http日志以在页面中显示_Angularjs - Fatal编程技术网

如何截取AngularJS$http日志以在页面中显示

如何截取AngularJS$http日志以在页面中显示,angularjs,Angularjs,我想截取来自AngularJS的控制台日志消息,并将它们显示在页面上的一个div中。我需要它来调试PhoneGap应用程序中的ajax流量 这是我想要捕获的错误类型的一个示例: 我试过了,但没有截获角度错误信息 我还尝试了gameover在答案中提出的解决方案。那也不走运。显然,$http以不同的方式处理错误日志记录。我就是为了这个目的而使用的。我通过创建日志对象 var log = log4javascript.getLogger('myApp') log.addAppender(new l

我想截取来自AngularJS的控制台日志消息,并将它们显示在页面上的一个div中。我需要它来调试PhoneGap应用程序中的ajax流量

这是我想要捕获的错误类型的一个示例:

我试过了,但没有截获角度错误信息

我还尝试了gameover在答案中提出的解决方案。那也不走运。显然,$http以不同的方式处理错误日志记录。

我就是为了这个目的而使用的。我通过创建日志对象

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来解决。