2014-06-12 18 views
60

Ich verstehe, es ist eine Best Practice in Winkel zu verwenden $log anstelle von console.log. Allerdings kann ich keine gute Dokumentation finden, die die Gründe erklärt. Warum sollte ein Entwickler $log verwenden?

Antwort

74

$log prüft zuerst, ob der Browser console.log unterstützt (IE 8, zum Beispiel, nicht). Dies verhindert, dass Fehler auf IE 8 angezeigt werden. Hinweis: Dies bedeutet nicht, dass es irgendetwas auf IE 8 protokolliert, es bedeutet einfach, dass es den Fehler nicht werfen wird.

Daneben können Sie auch decorate und Mock $log zu erweitern und zu Testzwecken, wenn Sie so geneigt sind. Sie könnten es z. B. so einrichten, dass es sich bei IE 8 für ein Array anmeldet.

Ein Bonus-Feature: Wenn Sie es eine JavaScript Error Instanz übergeben, wird es versuchen, es schön zu formatieren. Dies kann durch Lesen der source code herausgefunden werden.

EDIT: "Es ist nicht, dass IE 8 console.log nicht unterstützt. Es erstellt nur das Konsolenobjekt, bis die Dev-Tools geöffnet sind." Siehe Kommentare unten für weitere Details.

+2

Danke. Vor allem, um mich zum Quellcode zu führen. Ich lerne, dass das oft der richtige Ort ist. – user3141592

+0

Ich dachte mir, dass es mehr geben muss als nur fehlende Konsole zu vermeiden. Es gibt nicht viel, aber die Dekoration Tipper und Bonus-Feature, die Sie erwähnen, sind gut zu wissen. – user3141592

+8

+1 Ich denke, es ist wichtig zu beachten, dass IE 8 'console.log' nicht unterstützt. Es erzeugt das "Konsolen" -Objekt erst, wenn die Dev-Tools geöffnet sind. 'console.log' wird in IE 8 unterstützt, solange die Dev-Tools geöffnet sind. Siehe [this] (http://stackoverflow.com/questions/690251/what-heppened-to-console-log-in-ie-8) Frage als Referenz ... – War10ck

6

Nur abzuschließen @Steve's answer (was richtig ist), $log hat auch den Vorteil, dass ausgeschaltet. Mit diesem Code können Sie die Protokollierung von $log deaktivieren:

app.config(function($logProvider) { 
    $logProvider.debugEnabled(true); 
}); 

Dies ist sehr praktisch, wenn man sich einmal alle Protokolle deaktivieren möchten, anstatt sie durch die Linie manuell Zeile zu löschen.

Verwandte Themen