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?
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?
$ 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.
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/
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;
});
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
Musiałem to zrobić, aby zobaczyć wiadomości '$ log.debug' w Chrome. – ThisClark
Który domyślnie jest wyłączony. – commonpike
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.
Gdzie umieścić $ logProvider.debugEnabled (true)? –
Dziękuję. Używałem starszej wersji angularjs. Właśnie nadpisałem dostawcę dziennika w pliku angular.js w mojej aplikacji. –
@EricRohlfs - użyj bloku 'config'. –