使用console.group / groupEnd的Angular $ log

时间:2015-09-29 10:05:41

标签: javascript angularjs logging

我非常喜欢使用Angular的服务来处理我的Angular应用程序。因此,使用$log进行日志记录似乎是一个很自然的选择。它比console.log()有许多好处,就像我在生产环境中省略调试日志的方式一样。

但有一件事我很遗憾,我想知道我是否能克服这一点。我曾经在我的应用程序中使用console.group / console.groupCollapsedconsole.groupEnd来调试迭代器时清理我的控制台。

我尝试了以下装饰器,但它甚至没有接近(当然也没有雪茄)所需的行为:

app.config([ '$provide', function($provide) {
  // Use the `decorator` solution to substitute or attach behaviors to
  // original service instance; @see angular-mocks for more examples....

  $provide.decorator('$log', [ '$delegate', function($delegate) {
    // Save the original $log.debug()
    var debugFn = $delegate.debug;

    $delegate.debug = function() {
      var args    = [].slice.call(arguments),
      now     = new Date(),
      logtime = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() + '.' + now.getMilliseconds()

      // Prepend timestamp
      args[0] = logtime + ' - ' + args[0];

      // Call the original with the output prepended with formatted timestamp
      debugFn.apply(null, args)
    };
    $delegate.group = function() {
      var args    = [].slice.call(arguments),
      now     = new Date(),
      logtime = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() + '.' + now.getMilliseconds()

      // Prepend timestamp
      args[0] = ' --> ' + args[0];

      // Call the original with the output prepended with formatted timestamp
      debugFn.apply(null, args)
    };


    return $delegate;
  }]);
}]);

有没有办法让Angular $log更好地模仿这种行为?

0 个答案:

没有答案