Запазете първоначалното местоположение на пътя, когато предефинирате функциите на window.console

Искам да регистрирам всички съобщения на конзолата, така че предефинирах функциите на конзолата, включително log/warn/info/error като пример по-долу

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

Въпреки това загубих първоначалното местоположение, където всъщност се извиква console.error(): path:line, тъй като сега сочи към функцията apply() в кода по-горе. Как мога да получа тази информация?


person CygnusKnight    schedule 17.11.2015    source източник


Отговори (1)


Не можете да направите това. Можете обаче да го симулирате, като получите свойството .stack на грешката във вашата персонализирана функция и го добавите предварително/добавите към грешката или го регистрирате отделно.

(new Error).stack дава нещо като:

"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)"

За негрешки използвайте Stacktrace.js и вземете проследяване на стека на arguments.callee:

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

person apscience    schedule 17.11.2015
comment
Благодаря. Но проблемът е, че само изхвърляните грешки имат проследяване на стека. Целта ми е да предефинирам функциите на конзолата log/info/warn/error, за да свършат допълнителна работа и определено нямат проследяване на стека. - person CygnusKnight; 17.11.2015
comment
Вземете проследяване на стека от arguments.callee с помощта на stacktrace.js: github.com/stacktracejs/ - person apscience; 17.11.2015
comment
Това е малката част от stacktrace.js, която върви по веригата arguments.callee: github.com/stacktracejs/stack-generator - нямате нужда от всичко :) - person Eric Wendelin; 21.11.2015