2013-03-22 12 views
71

Próbuję użyć $ log.debug ("Foo"). Jak można go wyłączyć? Nie mogę znaleźć próbki w dowolnym miejscu. Myślę, że to musi być ustawione w konfiguracji, ale nie mogę też sprawić, żeby to działało.

Gdzie można ustawić włącznik i wyłącznik?

Odpowiedz

130

$ logProvider.debugEnabled (true)

ta jest dostępna tylko w angularjs 1.1.2 lub nowszej.

https://github.com/angular/angular.js/pull/1625

Tutaj jest przykładem, że jest ustawiony.

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

http://plnkr.co/edit/HZCAoS?p=preview

domyślnie jest włączony.

+2

Gdzie umieścić $ logProvider.debugEnabled (true)? –

+0

Dziękuję. Używałem starszej wersji angularjs. Właśnie nadpisałem dostawcę dziennika w pliku angular.js w mojej aplikacji. –

+0

@EricRohlfs - użyj bloku 'config'. –

13

Można zastąpić domyślne zachowanie dziennika $ za pomocą dekoratora, aby poprawić poziom rejestrowania. To jest przykład:

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

ta była inspirowana z prac John Crosby w http://www.thekuroko.com/using-angulars-log-provider/

1

podstawie odpowiedzi Diego, ale dodanie kilku env config i uczynienie go krócej. Możesz po prostu uruchomić swoją aplikację, używając: NODE_ENV=development lub NODE_ENV=production

E.g.1. NODE_ENV=development webpack-dev-server

E.g.2. NODE_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; 
}); 
6

Mam wobec tego samego problemu, ale nie jest to problem, który należy rozwiązać poprzez kodowanie zamiast po prostu go włączyć z poziomu konsoli przeglądarki

Go pocieszyć przeglądarki i ustawić poziom do verbose

+2

Musiałem to zrobić, aby zobaczyć wiadomości '$ log.debug' w Chrome. – ThisClark

+0

Który domyślnie jest wyłączony. – commonpike

0

Dobrze Ponieważ rozwiązanie wymaga od nas włączenia flagi Verbose, myślę, że najlepszym sposobem obsługi rejestrowania w kanciastym byłoby zwykłe zmienienie natywnej funkcji console.log w środowisku produkcyjnym dla całej aplikacji.

angular.module("myModule") 
.config(function(){ 
    //if production environment 
    console.log =()=>{}; 
}) 

To wszystko. W środowisku produkcyjnym powinno to wyłączać rejestrowanie wszędzie. Również teraz nie ma potrzeby wprowadzania $log w każdym sterowniku. Po prostu działa console.log("logging message")!

Możesz również wyłączyć console.info, console.warn, console.error i console.debug w taki sam sposób, jak na swoje potrzeby.