77

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

开关在哪里设置?

4

5 回答 5

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

默认情况下它是打开的。

于 2013-03-23T01:08:56.273 回答
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;
    });
});

这是受到约翰克罗斯比在http://www.thekuroko.com/using-angulars-log-provider/上的工作的启发

于 2015-09-10T16:23:45.497 回答
13

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

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

于 2017-06-28T15:24:03.807 回答
2

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

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

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

You can also disable console.info, console.warn, console.error and console.debug the same way as per your need.

于 2018-02-08T12:03:38.933 回答
1

基于 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;
});
于 2017-02-17T06:23:25.787 回答