2013-03-22 166 views
71

我试图使用$ log.debug(“Foo”)。它如何被打开。我无法在任何地方找到样本。我认为它需要在配置中设置,但我似乎也无法让它工作。

从哪里开启和关闭开关?

回答

130

$ logProvider.debugEnabled(真)

这只是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)放在哪里? – 2013-03-27 21:03:11

+0

谢谢。我使用的是较老版本的angularjs。我刚刚在我的app中覆盖了angular.js文件中的日志提供程序。 – 2013-03-28 14:45:17

+0

@EricRohlfs - 使用'config'块。 – 2014-03-17 00:24:17

13

您可以使用修饰器覆盖默认的$ 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/

1

基于迭戈的回应,但增加了一些配置包膜,使之更短的灵感。 您可以简单地运行您的应用程序使用:NODE_ENV=developmentNODE_ENV=production

E.g.1。 NODE_ENV=development webpack-dev-server

E.g.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; 
}); 
6

我也面临着同样的问题,但它不是通过编码,而不是从浏览器控制台

去只是使它能够安慰浏览器就可以解决的问题,并设置级别为verbose

+2

我不得不这样做,以查看Chrome中的$ log.debug'消息。 – ThisClark 2017-08-02 04:11:51

+0

默认情况下关闭。 – commonpike 2018-01-16 14:19:15

0

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

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

就是这样。在生产环境中,这应该禁止任何地方的日志记录此外,现在无需在每个控制器中注入$log。 只需console.log("logging message")作品!

您也可以按照您的需要以相同的方式禁用console.info,console.warn,console.errorconsole.debug