2017-02-01 16 views
3

Как записать номер строки журналов при захвате консоли? (только для Chrome)javascript - Захват консоли с номером строки

У меня есть следующее, чтобы записать все журналы;

consoleLogs: [], 

init: function(){ 
    app.captureConsole(); 
}, 

captureConsole: function(){ 
    var _log = console.log; 

    console.log = function() { 
     app.consoleLogs.push(JSON.stringify({method: 'log', args: arguments})); 
     return _log.apply(console, arguments); // <-- line number 123 [e.g.] 
    }; 
}, 

Когда консоль возвращается, номер строки для всех консолей равен 123, как ожидалось - это не важно. Я хочу, чтобы иметь возможность подталкивать исходный номер журнала консоли в мой массив.

Это nw.js приложение так, хром апи/NW апи было бы здорово [если он существует]

+0

Что значит номер строки? Номер строки кода, который называется 'console.log'? Или индекс журнала внутри массива 'consoleLogs'? – slebetman

+0

Номер строки журнала кодовой консоли был вызван. –

ответ

3

Вы можете попытаться разобрать значение new Error().stack. Это строка, которая является трассировкой стека области, в которой был создан объект Error.

Выход зависит от браузера, поскольку он является нестандартной функцией. Поскольку вам нужно только работать над nw.js, это может быть для вас вариант.

На node.js (и я подозреваю, что хром) выход новой строки разделенных строку, в которой каждая строка имеет формат:

at functionName (/absolute/file/path:lineNumber:charNumber) 

Так что в вашем случае информация, которую вы хотите, вероятно:

new Error().stack.split('\n')[1]; 
+0

Отлично! Фактически это второй индекс [2], хотя ... –