2014-08-27 71 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; 
}]); 

只需設定布爾和完成。