Je voudrais enregistrer l'user_id de la personne faisant une demande et le nom de la méthode de chaque méthode appelée à une classe JavaScript. Par exemple:
35 - log_in 35 - list_of_other_users 78 - log_in 35 - send_message_to_user 35 - connect_to_redis 78 - list_of_other_users
3 Réponses :
Je suppose que ceci est une application Web, dans laquelle si vous utilisez Connect, vous pouvez utiliser un middleware Logger qui enregistre l'utilisateur et le chemin d'URL, qui est probablement suffisant. Sinon, vous allez devoir faire des métaprogramming le long des lignes d'enveloppement de chaque fonction dans une fonction d'emballage pour effectuer la journalisation.
function sendMessage() { //code to send message //can use `this` to access instance properties } function MyClass(userId) { this.userId = userId; //or whatever this.sendMessage = logCall(sendMessage, this); //repeat above line for each instance method you want instrumented for logging }
Ceci est une alternative, pas tout à fait sûr à quel point il est fiable, il se sent un peu faux: comme vous pouvez le constater, il écrase le Etant donné que cela est étiqueté CoffeScript: P> appel code> Fonction - Cela crée un léger problème lorsque vous essayez d'appeler
console.log () code> de sorte que vous devez échanger la fonction de retour. Mais il semble fonctionner! P>
do ->
oldCall = Function::call
newCall = (self) ->
Function::call = oldCall
console.log "Function called: #{this.name}"
args = Array.prototype.slice.call arguments, 1
Function::call = newCall
this.apply self, args
Function::call = newCall
Cela va dans une récursion infinie pour moi puisque la tranche est appelée en tant que fonction. Je devais déplacer l'appel de la tranche avant de définir NewCall et transmettre le résultat en tant que variable ci-dessous. Pas sûr si cela fonctionne maintenant
La réponse est essentiellement correcte, mais voici comment éviter la récursivité infinie
strong> Coffeescript strong> p>
C'est génial mais pourriez-vous éclairer comment cela fonctionne et peut-être proposer un exemple d'utilisation? C'est assez avancé et SE est également pour les utilisateurs débutants / intermédiaires. :RÉ
Dupliqué possible de Comment puis-je déboguer des applications nœud.js?