2017-03-06 2 views
0

Ich versuche console.log abzufangen und schreibe es in ein Array, um programmgesteuert auf das Protokoll zuzugreifen. Dies sollte Cross-Browser-kompatibel sein.Wie man console.log überschreibt/abfängt und das ursprüngliche Protokoll an die Konsole ausgibt

window["log"]=[]; 
var logger = console.log; 
console.log = function() { 
    window["log"].push({arguments}); 
    // neither seems to output as original 
    logger(arguments); 
    logger.call (arguments); 
    logger.call (console, arguments); 
    logger.apply (arguments); 
} 

Mein Problem ist, dass logger(arguments) immer ein Array schreibt die ursprüngliche Nachricht zu trösten und nicht. Wie kann ich Konsolen die ursprüngliche Nachricht mit ursprünglichen Zeilennummern und Datei ausgeben lassen?

Antwort

2

Sie suchen:

logger.apply(console, arguments); 

..., die die ursprüngliche Funktion mit this Satz console und mit arguments als diskrete Argumente verteilt nennt.


Randbemerkung: Wenn Sie im Großen und Ganzen kompatibel sein wollen, müssen Sie den ES2015 + Code hier ersetzen:

window["log"].push({arguments}); 

mit ES5-kompatiblen Code:

window["log"].push({arguments: arguments}); 
Verwandte Themen