2014-08-27 2 views
5

Я использую в своем коде службу angularJS для ведения журнала ($ log.error(), $ log.debug(), $ log.info() и т. Д.), И он отлично работает.Отключить ведение журнала на AngularJS

Теперь я пытаюсь отключить все журналы. Я уже пробовал это:

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

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

Но это не делает ничего, журналы продолжают показывать ...

Каков наилучший способ отключить все angularJS журналов, которые я положил в моем коде?

EDIT:

Я звоню журналы, как это:

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

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

      }]) 
})(); 
+0

Это только должно отключить $ log.debug(). Неужели они все еще появляются? – marneborn

+1

Да, все еще появляется. Что я могу делать неправильно? Я отредактировал, чтобы добавить способ, которым я звоню в журналы. – vale

ответ

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

+0

Если вы удаляете строку или добавляете, если инструкция 'origDebug.apply (null, args)' ничего не будет показана. То же самое с другими методами. Таким образом, вы можете легко включить/выключить логин на странице с помощью глобальной переменной –

+0

И это лучший способ отключить журналы? Благодаря! – vale

0

debugEnabled функция должна отключить только $log.debug() сообщений. Поэтому, если вы хотите отключить ведение журнала с помощью простого config, как вы написали, переименуйте все ваши отладочные вызовы на $log.debug, а не на $log.log или $log.error или $log.info или $log.whatever.

Вы можете увидеть пример здесь http://jsfiddle.net/jccrosby/N2B6R/light/

+0

Со мной $ log.debug продолжает появляться. Однако, как лучше всего отключить все журналы? Я хочу сохранить остальных, потому что мне нравится причудливый способ показать их на консоли. – vale

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

Просто установите булево и сделано.

Смежные вопросы