Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS中打开/关闭$log.debug_Angularjs_Logging_Angularjs Log - Fatal编程技术网

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

如何在AngularJS中打开/关闭$log.debug,angularjs,logging,angularjs-log,Angularjs,Logging,Angularjs Log,我正在尝试使用$log.debug(“Foo”)。如何打开和关闭它。我到处都找不到样品。我认为它需要在配置中设置,但我似乎也不能让它工作 在哪里设置on和off开关?$logProvider.debugEnabled(真) 这仅在AngularJs 1.1.2或更高版本中可用 下面是一个正在设置的示例 var app = angular.module('plunker', []); app.config(function($logProvider){ $logProvider.debug

我正在尝试使用$log.debug(“Foo”)。如何打开和关闭它。我到处都找不到样品。我认为它需要在配置中设置,但我似乎也不能让它工作

在哪里设置on和off开关?

$logProvider.debugEnabled(真)

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

下面是一个正在设置的示例

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');
});


默认情况下,它处于启用状态。

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

上的工作中得到的灵感,该工作基于Diego的回应,但添加了一些环境配置并使其更短。 您只需使用以下命令运行应用程序:
NODE\u ENV=development
NODE\u ENV=production

例如1.
NODE\u ENV=开发网页包开发服务器

例如2.
NODE\u 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;
});

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


转到浏览器的控制台并将level设置为verbose

好吧,因为解决方案需要我们打开
verbose
标志,我认为处理登录的最好方法是简单地在整个应用程序的生产环境中更改本机
console.log
函数

angular.module("myModule")
.config(function(){
    //if production environment
    console.log = ()=>{};
})
就这样。在生产环境中,这应该在任何地方禁用日志记录。现在也不需要在每个控制器中注入
$log
。 只需
console.log(“日志消息”)
就可以了


您还可以根据需要以相同的方式禁用
console.info
console.warn
console.error
console.debug

您将$logProvider.debugEnabled(true)放在哪里?谢谢。我使用的是angularjs的旧版本。我刚刚在我的应用程序中的angular.js文件中重写了日志提供程序只需禁用
.debug()
方法,保持启用
.log()、.info()等
即可?这有什么意义?我假设,开发人员不会仅使用
$log.debug
来限制自己。provider中不应该有一个选项,允许禁用所有
$log
服务输出。或允许指定要留下的内容。现在这将是有用的。当然,我可以为
$log
服务编写我自己的服务包装,并从那里处理它。不知何故,但是这个选项又有什么意义呢?@Eugene我同意你的想法;我的猜测是,可能他们认为开发人员只希望在项目处于“调试/开发”模式时出现的消息将自己限制为$log.debug,而开发人员只会在他们认为没有真正理由关闭它们的情况下使用其他$log类型。例如,如果您正在创建一个库,将信息、警告和错误消息日志代码放入其中,您认为没有理由抑制这些代码,因为这些消息是库中包含的逻辑的一部分,可以帮助用户正确使用它。我必须这样做才能在Chrome中查看
$log.debug
消息。默认情况下,这些消息处于禁用状态。