如何在AngularJS中打开/​​关闭$ log.debug


Answers:


137

$ 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

默认情况下它是打开的。


2
您将$ logProvider.debugEnabled(true)放在哪里?
埃里克·罗夫斯

谢谢。我使用的是angularjs的旧版本。我只是改写了我应用中angular.js文件中的日志提供程序。
埃里克·罗尔夫斯

3
现在是否$logProvider.debugEnabled(false);仅禁用该.debug()方法,保持.log(), .info(), etc启用状态?
TrazeK 2014年

9
那有什么意义呢?我认为,开发人员不会只用限制自己$log.debug。提供程序中不应有一个选项,该选项将允许禁用所有$log服务输出。或者允许指定要离开的东西。现在,这将很有用。当然,我可以为$log服务编写自己的服务包装并从那里处理它。.但是,此选项又有什么意义呢?
尤金(Eugene)

2
@Eugene我同意你的想法;我的猜测也许是他们认为开发人员会将自己只希望在项目的“调试/开发”模式下出现的那些消息限制在$ log.debug中,而在某些情况下,开发人员只会使用其他$ log类型。他们认为没有真正的理由将其关闭。就像您在创建库一样,将信息,警告和错误消息的日志记录代码放到其中,您便没有理由抑制,因为这些消息是库中所包含的逻辑的一部分,可以帮助用户正确使用它。
StackOverflowUser 2015年

14

您可以使用装饰器覆盖默认的$ 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;
    });
});

这是从约翰·克罗斯比(John Crosby)在http://www.thekuroko.com/using-angulars-log-provider/


13

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

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


3
我必须这样做才能$log.debug在Chrome中查看消息。
ThisClark

默认情况下是关闭的。
commonpike

1

基于Diego的响应,但添加了一些env配置并使其更短。您可以通过简单地运行你的应用程序: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;
});

0

好吧,由于该解决方案要求我们打开Verbose标志,因此我认为处理角度登录的最佳方法是简单地console.log为整个应用程序更改生产环境中的本机功能。

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

而已。在生产环境中,这应禁用所有地方的日志记录。另外,现在无需注入$log每个控制器。简单地console.log("logging message")工作!

您还可以禁用console.infoconsole.warnconsole.errorconsole.debug以同样的方式,按您的需要。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.