【问题标题】:Incorrect logging message after override $log覆盖 $log 后的日志消息不正确
【发布时间】:2013-08-20 02:40:14
【问题描述】:
我正在尝试装饰 angular 的 $log 工厂以将消息的 timestamp 放入日志中。
到目前为止,它工作得很好,除了这种行为:
当我使用默认的 Angular 配置登录时,我收到:
对象 {name: "bryan", message: "was here"} 第三个参数的消息
Plunker
创建装饰器后,日志变成了这样:
["消息为", Object, "第三个参数"]
Plunker - 代码在这里
所以,对象没有展开到控制台,我需要点击消息才能看到完整的对象。
有人知道我错过了什么吗?或者知道更好的方法来做到这一点并将时间戳放在消息的开头?
【问题讨论】:
标签:
angularjs
angularjs-log
angularjs-decorator
【解决方案1】:
您需要将argument 数组扩展为warn() 的参数列表。您可以通过apply() 实现它。这只是一个 JavaScript 技巧。
warn: function () {
//create a new args. You can't modify arguments since it is controlled by AngularJS
var args = [new Date()];
angular.forEach(arguments, function (i) {
args.push(i);
})
$delegate.warn.apply(null, args);
}
$delegate.warn.apply(null, args); 的计算结果为 $delegate.warn(args[0], args[1], ...);。