Wie kann ich jeden Methodenaufruf in node.js protokollieren, ohne überall Debug-Zeilen hinzufügen zu müssen?

8

Ich möchte die user_id der Person, die eine Anfrage stellt, und den Methodennamen jeder Methode, die für eine JavaScript-Klasse aufgerufen wird, protokollieren. Zum Beispiel:

%Vor%

Da alles async ist, könnten Benutzer 35 und 78 gleichzeitig Dinge tun. Daher möchte ich sicherstellen, dass jede Protokollzeile mit ihrer Benutzer-ID beginnt, damit ich sie erfassen kann und nur die Aktivitäten eines Benutzers gleichzeitig sehen kann.

Gibt es eine superkluge Möglichkeit, dies zu tun, ohne Logger-Anweisungen zu jeder Methode hinzuzufügen?

    
Andrew Arrow 08.04.2013, 21:57
quelle

3 Antworten

2

Ich schätze, das ist eine Web-App. In diesem Fall können Sie, wenn Sie connect verwenden, eine Logger-Middleware verwenden, die den Benutzer und den URL-Pfad protokolliert, was wahrscheinlich ausreichend ist. Andernfalls müssen Sie einige Metaprogrammierung in Richtung der einzelnen Funktionen in einer Wrapper-Funktion für die Protokollierung tun.

%Vor%

Damit dies funktioniert, müssen Ihre Klassenmethoden Funktionen genannt werden, nicht anonym.

%Vor%     
Peter Lyons 08.04.2013, 22:09
quelle
5

Die Antwort ist im Wesentlichen richtig, aber hier ist, wie unendliche Rekursion zu vermeiden ist

JavaScript

%Vor%

Coffeescript

%Vor%     
mthorley 24.02.2015 23:57
quelle
4

Dies ist eine Alternative, nicht ganz sicher, wie zuverlässig es ist, es fühlt sich ein bisschen falsch an:

%Vor%

Wie Sie sehen, überschreibt es die call -Funktion - dies erzeugt ein kleines Problem, wenn Sie versuchen, console.log() aufzurufen, also müssen Sie die Funktion zurück tauschen. Aber es scheint zu funktionieren!

BEARBEITEN

Da dies mit CoffeeScript versehen ist:

%Vor%     
phenomnomnominal 09.04.2013 04:15
quelle