为什么使用angular的$ log而不是console.log?

use*_*592 64 logging angularjs

我知道这是一个角度使用的最佳实践,$log而不是console.log.但是,我找不到解释原因的好文件.开发人员为什么要使用$log?

Ste*_*ers 78

$log首先检查浏览器是否支持console.log(例如,IE 8不支持).这可以防止在IE 8上显示错误.注意:这并不意味着它将在IE 8上记录任何内容,它只是意味着它不会抛出错误.

除此之外,它还允许您装饰和模拟$log以进行扩展和测试,如果您愿意的话.例如,您可以将其装饰为登录到支持IE 8的阵列.

一个额外的功能:如果你传递一个JavaScript Error实例,它将尝试很好地格式化它.这可以通过阅读源代码找到.

编辑: "不是IE 8不支持console.log.它只是在打开开发工具之前不会创建控制台对象." 请参阅下面的评论以获取更多详

  • 使用$ log也有一个缺点:如果你使用console.log,你可以看到文件和实际日志记录的行号.使用$ log,它将始终显示angular.js作为控制台中日志的来源. (58认同)
  • 另一个好处是,它允许您使用$ logProvider.debugEnabled(false)关闭生产中的调试日志记录; (19认同)
  • +1我认为重要的是要注意IE 8不支持`console.log`.在打开开发工具之前,它不会创建`console`对象.只要dev工具打开,`console.log`在IE 8中是受支持的.请参阅[this](http://stackoverflow.com/questions/690251/what-happened-to-console-log-in-ie8)问题作为参考... (9认同)
  • 它短3个字符;) (3认同)
  • 谢谢.特别是为了指导我的源代码.我知道这经常是去的地方. (2认同)

Mis*_*lis 8

只是为了完成@Steve的回答(这是正确的),$log也有被关闭的优势.使用此代码,您可以禁用以下日志记录$log:

app.config(function($logProvider) {
  $logProvider.debugEnabled(true);
});
Run Code Online (Sandbox Code Playgroud)

如果要一次禁用所有日志,而不是手动逐行删除它,这非常方便.