在Angular 1.4.2中全局禁用$ log.debug

时间:2016-09-28 20:40:11

标签: angularjs debugging logging

我有一个角度应用程序,它使用$ log.debug在控制台中记录调试消息。该应用程序的大小正在增加,因此我想看看是否有一种方法可以在生产中部署时全局禁用这些日志文件。我看到一些帖子,你可以配置$ logProvider来禁止将调试记录到控制台( $ logProvider.debugEnabled(false); ),但这对我不起作用。这是我的一个控制器,我添加了这个:

(function () {
    'use strict';

    angular
        .module('bodyShop')

        // This config was added to globally disable logs
        .config(function($logProvider){
            $logProvider.debugEnabled(false);
        })

        .controller('CustomerController', function ($log, $window) {

         var vm = this;
         ...
         ...
         ...
         ...
         ...

这不会引发任何错误,页面按预期工作,但我仍然可以在控制台中看到所有调试日志。

另外,我知道这只会“全局”禁用此控制器中的日志。但我也尝试在我的模块中添加$ logProvider配置,以便我可以在整个应用程序中禁用日志,但没有成功。

任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用装饰器覆盖默认的日志记录行为。 John Crosby在http://www.thekuroko.com/using-angulars-log-provider/

撰写了一篇文章

以下是一些代码,可以通过回答How to turn on/off $log.debug in AngularJS来完成这项工作。我还没有运行它,但我认为这就是你要找的东西

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

答案 1 :(得分:0)

应用程序中只有一个$logProvider,无论有多少个模块,因此设置debugEnabled一次在注入的所有模块中都是全局的

唯一的解释是它被设置在另一个配置中的其他配置中,该配置在显示的

之后运行