Angular的$ log.debug()未在Chrome控制台上显示

时间:2017-08-15 20:32:12

标签: javascript angularjs google-chrome

最近,我的Chrome浏览器停止在控制台上显示$log.debug()消息。我一直在使用这种方式在所有控制器上使用angular而不是console.log()进行日志记录,因为当我将脚本上传到生产服务器时很容易禁用日志记录。

我已经检查了我的$logProvider配置,debugEnabled()设置为true

由于某种原因,在Chrome上显示$log.debug()消息的唯一方法是在控制台过滤器上启用verbose消息。直到最近,这是没有必要的。启用详细信息并不好,因为控制台会发出许多我不关心的其他消息。

我目前在Windows 7计算机上使用64位Chrome v60.0.3112.101。它与浏览器的版本有关吗?我可以做些什么来让它在没有详细模式的情况下再次显示消息吗?

Ps。:Firefox继续一如既往地展示一切。

1 个答案:

答案 0 :(得分:10)

Chrome / Chromium版本之间的

console.debug日志级别不一致。控制台用户界面在Chrome 58中已更改。目前console.debug需要详细级别。

如果此日志级别不需要其他控制台条目,则可以将控制台设置更改为仅限用户消息

console.debug

如果应在特定页面中更改此行为,则可以修补console

console.debug = console.log;

考虑到AngularJS $log服务是console的抽象,$log.debug依赖于debugEnabled状态以区别于$log.log,这可以在AngularJS应用程序中以不那么突兀的方式修复:

app
.config(['$provide', '$logProvider', ($provide, $logProvider) => {
  // expose a provider to reach debugEnabled in $log
  $provide.value('$logProvider', $logProvider);
})
.decorator('$log', ['$logProvider', '$delegate', ($logProvider, $delegate) => {
  // override $log.debug
  $delegate.debug = function () {
    if (!$logProvider.debugEnabled())
      return;
    $delegate.log.apply($delegate, arguments);
  });

  return $delegate;
});