2014-08-27 73 views
5

我在我的代码中使用angularJS服务进行日志记录($ log.error(),$ log.debug(),$ log.info()等),它工作正常。禁用登录AngularJS

现在,我试图禁用所有的日志。我已经尝试过这样的:

var app = angular.module('app', []); 

app.config(
    ['$logProvider', 
    function ($logProvider) { 
     $logProvider.debugEnabled(false); 
    }] 
); 

但这并不算什么,日志继续显示...

什么是禁用一切,我把我的代码angularJS日志的最佳方式?

编辑:

我打电话日志是这样的:

(function() { 
    app.controller('MyController', ['$log', 

      function($log) { 
       this.testFunction = function() { 
        $log.debug("debug"); 
        $log.info("info"); 
        $log.error("error"); 
       }; 

      }]) 
})(); 
+0

这只是应该关闭$ log.debug()。 那些仍然显示? – marneborn 2014-08-27 20:00:05

+1

是的,仍然显示。我能做什么错了?我编辑添加我打电话日志的方式。 – vale 2014-08-28 08:21:00

回答

6

你可以 “覆盖” 的日志方法,像下面(here full post):

angular.module('app', []) 

.config(['$provide', function ($provide) { 
    $provide.decorator('$log', ['$delegate', function ($delegate) { 
     // Keep track of the original debug method, we'll need it later. 
     var origDebug = $delegate.debug; 
     /* 
     * Intercept the call to $log.debug() so we can add on 
     * our enhancement. We're going to add on a date and 
     * time stamp to the message that will be logged. 
     */ 
     $delegate.debug = function() { 
      var args = [].slice.call(arguments); 
      args[0] = [new Date().toString(), ': ', args[0]].join(''); 

      // Send on our enhanced message to the original debug method. 
      origDebug.apply(null, args) 
     }; 

     return $delegate; 
    }]); 

你应该还请阅读http://blog.projectnibble.org/2013/12/23/enhance-logging-in-angularjs-the-simple-way/以了解如何创建完整的日志记录提供程序,以便您可以在配置时运行

+0

但我不想编辑日志显示的方式。我只想禁用所有的日志... – vale 2014-08-28 08:26:26

+0

如果你删除行或添加if语句到'origDebug.apply(null,args)'什么都不会显示。与其他方法一样。通过这种方式,您可以使用全局变量 – 2014-08-28 08:27:29

+0

轻松打开/关闭登录页面。这是禁用日志的最佳方式吗?谢谢! – vale 2014-08-28 13:20:35

0

debugEnabled函数应该仅禁用$log.debug()消息。因此,如果您想按照您所写的简单config来禁用日志记录,则将所有调试调用重命名为$log.debug,而不是$log.log$log.error$log.info$log.info$log.whatever

这里你可以看到一个例子http://jsfiddle.net/jccrosby/N2B6R/light/

+0

随着我$ log.debug继续显示..但是,禁用所有不同日志的最好方法是什么?我想保留其他人,因为我喜欢他们在控制台上显示的奇特方式。 – vale 2014-08-28 08:35:00

1

这里是我的两分钱:

var IN_DEVELOPMENT = true; 

$provide.decorator('$log', ['$delegate', function ($delegate) 
{ 
     var originals = {}; 
     var methods = ['info' , 'debug' , 'warn' , 'error']; 

     angular.forEach(methods , function(method) 
     { 
      originals[method] = $delegate[method]; 
      $delegate[method] = function() 
      { 
       if (IN_DEVELOPMENT) { 
        var args = [].slice.call(arguments); 
        var timestamp = new Date().toString(); 
        args[0] = [timestamp.substring(4 , 24), ': ', args[0]].join(''); 
        originals[method].apply(null , args); 
       } 
      }; 
     }); 

     return $delegate; 
}]); 

只需设定布尔和完成。