【问题标题】:How to turn on/off $log.debug in AngularJS如何在 AngularJS 中打开/关闭 $log.debug
【发布时间】:2013-03-11 19:24:18
【问题描述】:

我正在尝试使用 $log.debug("Foo")。怎么能关掉。我在任何地方都找不到样品。我认为它需要在配置中设置,但我似乎也无法让它工作。

开关在哪里设置?

【问题讨论】:

    标签: angularjs logging angularjs-log


    【解决方案1】:

    $logProvider.debugEnabled(true)

    这仅在 AngularJs 1.1.2 或更高版本中可用。

    https://github.com/angular/angular.js/pull/1625

    这是一个设置的例子。

    var app = angular.module('plunker', []);
    
    app.config(function($logProvider){
      $logProvider.debugEnabled(true);
    });
    
    app.controller('MainCtrl', function($scope, $log ) {
      $scope.name = 'World';
      $scope.model = {value: "test"};
      $log.debug('TEST Log');
    });
    

    http://plnkr.co/edit/HZCAoS?p=preview

    默认开启。

    【讨论】:

    • 你把 $logProvider.debugEnabled(true) 放在哪里?
    • 谢谢。我使用的是旧版本的 angularjs。我只是在我的应用程序的 angular.js 文件中覆盖了日志提供程序。
    • 现在$logProvider.debugEnabled(false); 是否只是禁用.debug() 方法,而启用.log(), .info(), etc
    • 那有什么意义呢?我认为,开发人员不会只使用$log.debug 来限制自己。提供者中不应该有一个选项,允许禁用所有$log 服务输出。或者允许指定要离开的内容。现在这很有用。当然,我可以为$log 服务编写自己的服务包装器并从那里处理它..不知何故,但是这个选项又有什么意义呢?
    • @Eugene 我同意你的想法;我的猜测是,也许他们认为开发人员将自己限制在 $log.debug 中,因为他们只想在项目的“调试/开发”模式下出现这些消息,而开发人员只会使用另一个$log 类型,用于他们认为没有实际情况可以关闭它们的情况。就像您正在创建一个库,将信息、警告和错误消息记录代码放入您认为没有理由禁止显示的代码中,因为这些消息是库中包含的逻辑的一部分,可帮助您的用户正确使用它。
    【解决方案2】:

    您可以使用装饰器覆盖默认的 $log 行为以增强日志级别。这是一个例子:

    angular.module('app').config(function($logProvider, $provide){
    
        $logProvider.debugEnabled(false);
    
        $provide.decorator('$log', function ($delegate) {
            //Original methods
            var origInfo = $delegate.info;
            var origLog = $delegate.log;
    
            //Override the default behavior
            $delegate.info = function () {
    
                if ($logProvider.debugEnabled())
                    origInfo.apply(null, arguments)
            };
    
            //Override the default behavior    
            $delegate.log = function () {
    
                if ($logProvider.debugEnabled())
                    origLog.apply(null, arguments)
            };
    
            return $delegate;
        });
    });
    

    这灵感来自于 http://www.thekuroko.com/using-angulars-log-provider/ 上的 John Crosby 的工作

    【讨论】:

      【解决方案3】:

      我也遇到过同样的问题,但这不是通过编码来解决的问题,而是从浏览器控制台启用它

      转到浏览器的控制台并将级别设置为详细

      【讨论】:

      • 我必须这样做才能在 Chrome 中看到 $log.debug 消息。
      • 默认关闭。
      【解决方案4】:

      好吧,由于解决方案要求我们打开 Verbose 标志,我认为处理 Angular 登录的最佳方法是简单地更改整个应用程序的生产环境中的原生 console.log 函数。

      angular.module("myModule")
      .config(function(){
          //if production environment
          console.log = ()=>{};
      })
      

      就是这样。在生产环境中,这应该在所有地方禁用日志记录。现在也不需要在每个控制器中注入$log。 只需 console.log("logging message") 即可!

      您也可以根据需要禁用console.infoconsole.warnconsole.errorconsole.debug

      【讨论】:

        【解决方案5】:

        基于 Diego 的回复,但添加了一些环境配置并使其更短。 您可以简单地使用:NODE_ENV=developmentNODE_ENV=production 运行您的应用程序

        例如 1。 NODE_ENV=development webpack-dev-server

        例如 2。 NODE_ENV=production node app.js

        $logProvider.debugEnabled(process.env.NODE_ENV === 'development');
        $provide.decorator('$log', function($delegate) {
            $delegate.info = $logProvider.debugEnabled() ? $delegate.info : function() {};
            $delegate.log = $logProvider.debugEnabled() ? $delegate.log : function() {};
            return $delegate;
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-13
          • 2020-01-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多