Як увімкнути / вимкнути $ log.debug в AngularJS


77

Я намагаюся використовувати $ log.debug ("Foo"). Як його можна вимкнути. Я ніде не можу знайти зразок. Я думаю, що це потрібно встановити у конфігурі, але, здається, я теж не можу змусити це працювати.

Де можна встановити перемикач увімкнення та вимкнення?

Відповіді:


137

$ 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

За замовчуванням він увімкнений.


2
Де ви розміщуєте $ logProvider.debugEnabled (істина)?
Ерік Рольфс,

Дякую. Я використовував стару версію angularjs. Я просто переписав постачальника журналу у файл angular.js у своєму додатку.
Ерік Рольфс

3
Тепер $logProvider.debugEnabled(false);просто вимкніть .debug()метод, залишивши .log(), .info(), etcввімкненим?
TrazeK

9
У чому тоді сенс? Я припускаю, що розробники не обмежуються лише $log.debug. Якби у постачальника не було опції, яка дозволила б відключити всі $logвихідні послуги. Або дозвольте вказати, що залишити. Тепер це було б корисно. Звичайно, я міг написати свою власну обгортку для $logобслуговування та звідти її обробити .. як-небудь, але знову ж таки, який сенс у цьому варіанті?
Євген

2
@Eugene Я згоден з вашими думками; я думаю, може бути , вони вирішили , розробники будуть обмежувати себе в $ log.debug для тих повідомлень , які вони тільки хотіли відбутися в той час як в режимі «налагодження / розробки» на своєму проекті, і розробники будуть використовувати тільки інші типи $ журналу за винятком випадків , в яких вони припустили, що реального випадку їх відключення не було. Як якщо б ви створювали бібліотеку, вводячи код реєстрації інформації, попереджень та повідомлень про помилки в тому, що не бачили причин для придушення, оскільки ці повідомлення є частиною логіки, що міститься у вашій бібліотеці, щоб допомогти вашим користувачам правильно її використовувати.
StackOverflowUser

14

Ви можете замінити поведінку $ 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/


13

Я зіткнувся з тією ж проблемою, але це не проблема, яку потрібно вирішити кодуванням, а просто ввімкніть її з консолі браузера

Перейдіть на консоль браузера і встановіть рівень детальним


3
Мені довелося це зробити, щоб побачити $log.debugповідомлення в Chrome.
ThisClark

Який за замовчуванням вимкнено.
commonpike

1

На основі відповіді Дієго, але додавши деякі налаштування env та скорочуючи їх. Ви можете просто запустити програму, використовуючи: NODE_ENV=developmentабоNODE_ENV=production

Наприклад, 1. NODE_ENV=development webpack-dev-server

Наприклад, 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;
});

1

Ну, оскільки рішення вимагає від нас увімкнення Verboseпрапора, я вважаю, що найкращим способом обробки реєстрації в angular було б просто змінити власну 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точно так само , як у вашій потреби.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.