7

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

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

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

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

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

1答案 正确答案




10

console.debugChrome / Chromium版本之间的日志级别不一致。Chrome 58中的控制台UI已更改目前console.debug需要详细级别。

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

console.debug

如果应该在特定页面内更改此行为,console可以修补:

console.debug = console.log;


1)我的做法如下 
myApp
.config(function ($logProvider) {
$logProvider.debugEnabled(true);
console.debug = console.log;
});
2) 或者 不改代码 直接修改 chrome 控制台


image.png





考虑到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;
});
  • 我没有尝试过装饰器选项,只测试了“用户消息”并按预期工作。谢谢! -  FelipeLeão于 18年8月16日19:04
  • 别客气。“仅用户消息”将删除所有其他具有更高日志级别但不是由console调用产生的条目(例如,请求失败)。这可能是不合需要的。 -  Estus Flask 18年8月16日19:17
  • 装饰器代码对我不起作用,但只是了解Chrome隐藏日志的方式确实有帮助! -  无机 于2017年10月5日22:40

 来自 https://stackoverflow.com/questions/45701089/angulars-log-debug-not-showing-on-chromes-console


image.png