Как включить / выключить $log.debug в AngularJS
Я пытаюсь использовать $log.debug("Foo"). Как это можно выключить. Я не могу найти образец нигде. Я думаю, что это должно быть установлено в конфигурации, но я не могу заставить это работать.
Где можно установить выключатель?
5 ответов
$ LogProvider.debugEnabled(правда)
Это доступно только в AngularJs 1.1.2 или новее.
https://github.com/angular/angular.js/pull/1625
Вот пример этого.
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
По умолчанию он включен.
Вы можете переопределить поведение $log по умолчанию с помощью декоратора, чтобы улучшить уровень журнала. Это пример:
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;
});
});
Это было вдохновлено работой Джона Кросби на http://www.thekuroko.com/using-angulars-log-provider/
Я столкнулся с той же проблемой, но это не проблема, которую нужно решить с помощью кодирования, а просто включите ее из консоли браузера
Зайдите в консоль браузера и установите подробный уровень
Ну, так как решение требует от нас включения Verbose
флаг, я думаю, что лучший способ справиться с регистрацией в угловом состоит в том, чтобы просто изменить нативный console.log
функция в производственной среде для всего приложения.
angular.module("myModule")
.config(function(){
//if production environment
console.log = ()=>{};
})
Вот и все. В производственной среде это должно отключить ведение журнала везде. Также нет необходимости вводить $log
в каждом контроллере сейчас. Просто console.log("logging message")
работает!
Вы также можете отключить console.info
, console.warn
, console.error
а также console.debug
так же, как в соответствии с вашими потребностями.
Основано на ответе Диего, но добавив немного конфигурации env и сделав его короче. Вы можете просто запустить свое приложение, используя: NODE_ENV=development
или же NODE_ENV=production
Eg1. NODE_ENV=development webpack-dev-server
Eg2. 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;
});