2015-11-17 1 views
1

Je veux enregistrer tous les messages de la console donc je redéfini les fonctions de la console, y compris journal/warn/info/erreur comme un exemple ci-dessousGardez l'emplacement du chemin d'origine lorsque la redéfinition des fonctions window.console

var originalError = console.error;  
console.error = function() { 
    //Do something for logging 
    originalError.apply(console, arguments); 
}; 

Cependant, j'ai perdu l'emplacement d'origine où le fichier console.error() est appelé: path:line, puisqu'il pointe désormais vers la fonction apply() dans le code ci-dessus. Comment puis-je obtenir cette information?

Répondre

2

Vous ne pouvez pas faire cela. Cependant, vous pouvez le simuler en obtenant la propriété .stack de l'erreur dans votre fonction personnalisée, et en l'ajoutant/en l'ajoutant à l'erreur ou en l'enregistrant séparément.

(new Error).stack donne quelque chose comme:

"Error 
    at <anonymous>:2:5 
    at Object.InjectedScript._evaluateOn (<anonymous>:875:140) 
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:808:34) 
    at Object.InjectedScript.evaluate (<anonymous>:664:21)" 

Pour les erreurs non, utilisez Stacktrace.js et obtenir une trace de pile de la arguments.callee:

https://github.com/stacktracejs/stacktrace.js#generate-a-stacktrace-from-walking-argumentscallee

+0

Merci. Mais le problème est seulement les erreurs throwable ont la trace de la pile. Mon but est de redéfinir les fonctions log/info/warn/error de la console pour faire du travail supplémentaire et définitivement elles n'ont pas de trace de pile. – CygnusKnight

+0

Récupère une trace de pile à partir de 'arguments.callee' en utilisant stacktrace.js: https://github.com/stacktracejs/stacktrace.js#generate-a-stacktrace-from-walking-argumentscallee – apscience

+1

C'est la petite partie de stacktrace .js qui marche la chaîne 'arguments.callee': https://github.com/stacktracejs/stack-generator - vous n'avez pas besoin de tout :) –