webentwicklung-frage-antwort-db.com.de

So schalten Sie $ log.debug in AngularJS ein/aus

Ich versuche, $ log.debug ("Foo") zu verwenden. Wie kann es ausgeschaltet werden? Ich kann nirgendwo eine Probe finden. Ich denke, es muss in der Konfig gesetzt werden, aber ich kann nicht scheinen, dass das auch funktioniert.

Wo stellt man den Ein- und Ausschalter ein?

74
Eric Rohlfs

$ logProvider.debugEnabled (true)

Dies ist nur in AngularJs 1.1.2 oder höher verfügbar.

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

Hier ist ein Beispiel, wie es eingestellt wird.

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

Standardmäßig ist es eingeschaltet.

135
rgaskill

Sie können das Standardverhalten von $ log mit einem Dekorator überschreiben, um die Protokollebene zu verbessern. Dies ist ein Beispiel:

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

Dies wurde aus der Arbeit von John Crosby an http://www.thekuroko.com/using-angulars-log-provider/ inspiriert.

13
Diego

Ich bin mit dem gleichen Problem konfrontiert, aber es ist kein Problem, das durch Codierung gelöst werden muss. Stattdessen muss es von der Browserkonsole aus aktiviert werden

Gehen Sie zur Konsole des Browsers und setzen Sie die Ebene auf verbose

10
nitin

Basierend auf der Antwort von Diego, aber dem Hinzufügen einiger env config und der Verkürzung .. Sie können Ihre App einfach ausführen mit: NODE_ENV=development oder 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

Nun, da die Lösung erfordert, dass wir das Flag Verbose aktivieren, denke ich, der beste Weg, um die Protokollierung in eckig zu behandeln, wäre, einfach die native console.log-Funktion in Production Environment für die gesamte Anwendung zu ändern.

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

Das ist es. In der Produktionsumgebung sollte dies die Protokollierung überall deaktivieren. Es ist auch nicht nötig, $log jetzt in jeden Controller einzuspritzen .____ Einfach funktioniert console.log("logging message")!

Sie können auch console.info, console.warn, console.error und console.debug auf dieselbe Weise wie je nach Bedarf deaktivieren.

0
Meliodas