Задать вопрос
zkrvndm
@zkrvndm
Архитектор решений

Как узнать номер строки в коде с которой вызвана функция?

Хочу сделать свою собственную функцию логирования:
function log(text) {
    console.log(text);
}

Но хотелось бы, чтобы в консоли вместе с логом показывалась и ссылка на строку взвывавшую log()

Это вообще реально сделать? И если да, то каким образом?
  • Вопрос задан
  • 678 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
you_web
@you_web
Кратко обо мне
Можно в девтулзах по колстеку смотреть кто вызвал функцию, а вот получить номер строчки кода думаю нельзя.

5f65df1f6ac26749295665.png

Если вы пишете на чем то(тайпскрипт, реакт и т.д) либо или используете минификатор или бабел, то номер строчки кода всё равно будет отличаться от ваших исходников.

Но можно в аргумент функции логера передавать параметром имя функции.

const logger = (text, fnName) => {
  console.log(text, fnName);
}

const someFn = () => {
  // Code...
  logger('text', 'someFn');
}
Ответ написан
@acwartz
Тут должна быть ваша реклама.
весь-весьма странным образом но можно.
Есть класс Error выбрасывающий исключение, в секции catch будет объект Error у котрого будет поле стэка. Не хитрыми манипуляциями со строкой, можно получить нужное.
function patchConsole() {
  window.oldConsole = window.console;
  var myConsole = {
     getStack: function() {
        try {
          throw Error('CustomError');
       } catch(e) {
         return e.stack;
       }
     },
     log: function(data) {
       let stack = this.getStack();
       let s = `<p>${data} at ${stack.split(' at ')[3]}</p>`;  //0 - info stack start, 1 - getStack, 2 - this function, 3 - calle function
       $('div.myconsole').append(s);
       oldConsole.log(s);
     }
  }
  window.console = myConsole;
}


function dummyFunction() {
  console.log('Dummu called a custom log!');   
}

patchConsole();
dummyFunction();

dummyFunction укажет на console.log внутри себя.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы