web-dev-qa-db-fra.com

Comment activer/désactiver $ log.debug dans AngularJS

J'essaie d'utiliser $ log.debug ("Foo"). Comment peut-il être activé. Je ne trouve aucun échantillon nulle part. Je pense que cela doit être réglé dans la configuration, mais je n'arrive pas à obtenir que cela fonctionne.

Où faut-il placer l'interrupteur marche/arrêt?

74
Eric Rohlfs

$ logProvider.debugEnabled (true)

Ceci est uniquement disponible dans AngularJs 1.1.2 ou version ultérieure.

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

Voici un exemple de réglage.

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

Par défaut, il est activé.

135
rgaskill

Vous pouvez remplacer le comportement par défaut de $ log par un décorateur pour améliorer le niveau de journalisation. Ceci est un exemple:

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

Cela a été inspiré du travail de John Crosby sur http://www.thekuroko.com/using-angulars-log-provider/

13
Diego

J'ai été confronté au même problème mais ce n'est pas un problème à résoudre en codant, mais simplement l'activer depuis la console du navigateur

Accédez à la console du navigateur et définissez le niveau sur verbose

10
nitin

Sur la base de la réponse de Diego, mais en ajoutant un peu de configuration env et en le rendant plus court . Vous pouvez simplement exécuter votre application en utilisant: NODE_ENV=development ou 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;
});
1
Ignacio Martínez

Comme la solution exige que nous activions l'indicateur Verbose, le meilleur moyen de gérer la connexion angulaire serait simplement de modifier la fonction native console.log dans l'environnement de production pour l'ensemble de l'application.

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

C'est tout. En environnement de production, cela devrait désactiver la journalisation partout. De plus, il n’est pas nécessaire d’injecter $log dans tous les contrôleurs maintenant . Tout simplement console.log("logging message") fonctionne!

Vous pouvez également désactiver console.info, console.warn, console.error et console.debug de la même manière selon vos besoins.

0
Meliodas