【问题标题】:Why use angular's $log instead of console.log?为什么使用 Angular 的 $log 而不是 console.log?
【发布时间】:2014-08-02 20:43:48
【问题描述】:

我知道使用$log 而不是console.log 是角度的最佳做法。 但是,我找不到解释原因的好文档。为什么开发者应该使用$log

【问题讨论】:

    标签: angularjs logging


    【解决方案1】:

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

    除此之外,如果您愿意,它还允许您 decorate 和模拟 $log 用于扩展和测试目的。例如,您可以装饰它以记录到数组以支持 IE 8。

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

    编辑: “并不是 IE 8 不支持 console.log。它只是在开发工具打开之前不会创建控制台对象。”有关详细信息,请参阅下面的 cmets。

    【讨论】:

    • 谢谢。特别是用于将我引导至源代码。我知道这是经常去的地方。
    • +1 我认为重要的是要注意并不是 IE 8 不支持console.log。在打开开发工具之前,它不会创建 console 对象。只要开发工具打开,console.log 就在 IE 8 中受支持。请参阅this 问题作为参考...
    • 使用 $log 也有一个缺点:如果你使用 console.log,你可以看到文件和实际日志记录的行号。使用 $log 时,它将始终将 angular.js 显示为控制台中的日志源。
    • 短了 3 个字符 ;)
    • 另一个好处,它允许你在生产环境中关闭调试日志,使用 $logProvider.debugEnabled(false);
    【解决方案2】:

    只是为了完成@Steve's answer(这是正确的),$log 还具有被关闭的优势。使用此代码,您可以禁用来自 $log 的日志记录:

    app.config(function($logProvider) {
      $logProvider.debugEnabled(true);
    });
    

    如果您想一次禁用所有日志,而不是手动逐行删除它们,这将非常方便。

    【讨论】:

    • 这只会关闭 $log.debug(),但不会关闭其他日志级别。
    • 这很好,你的日志有什么用?我认为调试应该是最常用的,其他的在真正需要时提供更多信息。
    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多