Für eine AngularJS-Anwendung wäre die beste Lösung, einen Decorator für den Standard-$ log-Dienst zu erstellen, der dann den serverseitigen Logger umschließt.
Dieser Ansatz funktioniert, wenn Sie sich entscheiden, Winston nicht zu verwenden, einen anderen Remote Logger zu verwenden oder einen eigenen zu schreiben. Indem Sie den Decorator verwenden, entfernen Sie die Auswirkungen aus Ihrem Code, da Sie in Ihrer Anwendung weiterhin den Standarddienst $log
verwenden.
Denn um ehrlich zu sein, Winston sieht aus wie ein Nodejs Logger - ich bin mir nicht sicher, ob es im Browser funktioniert.
Wert Anbieter für winston
var winston = require('winston');
app.value('winston', winston);
Ihre Dekorateur hinzufügen Dann erstellen
logDecorator.$inject = ['$provide'];
function logDecorator($provide) {
$provide.decorator('$log', ['$delegate', 'winston', function($delegate, winston) {
var origLog = $delegate.log;
var origDebug = $delegate.debug;
var origError = $delegate.error;
// ...
$delegate.log = function() {
winston.log(arguments);
origLog.apply(null, arguments);
}
$delegate.debug = function() {
winston.debug(arguments);
origDebug.apply(null, arguments);
}
$delegate.error = function() {
winston.error(arguments);
origError.apply(null, arguments);
}
}]
}
app.config(logDecorator);
Sie können sehen, wo dieser Code geht. Sie können wahrscheinlich eine viel sauberere Implementierung haben, die nur durch ein Array von Zeichenfolgenarrays von Protokollstufen hindurchläuft, um die Delegiertenmethoden zu erzeugen.
Jetzt loggen Sie Ihre Nachrichten wie gewohnt in $ log und sie werden an winston weitergeleitet. Darüber hinaus werden alle kantigen oder 3rd-Party-Modul Fehler protokolliert.