查找行号FROM WHERE发生对当前函数的调用

时间:2013-12-06 15:43:55

标签: javascript logging reflection

我有一个轻量级的日志功能。为了保持简单,例如:

function log(msg){
    console && console.log && console.log(msg);
}
which i have in a seperated file "Logging.js".

现在从另一个文件中我可以说“hello.js”:

log("Hello");

现在,如果我调用该函数,控制台将始终显示Logging.js:2作为发生日志记录的位置。因此,没有机会确定消息来自何处。日志消息应该说hello.js:1

是否可以找出调用日志功能的位置,找出呼叫的行号,然后操纵控制台显示的行号?

或者是否有更简单的解决方案?

注意,请仔细阅读:它不是关于当前的行号。它是关于函数调用发生的行号以及如何操作日志输出,以便它显示行号FROM FROM调用函数。这不是错误或捕捉错误。

我前段时间已经提出过这个问题了,它被贬低并立即宣布为How can I determine the current line number in JavaScript?的副本,但事实并非如此。关于找到当前行号的问题

1 个答案:

答案 0 :(得分:2)

您可以构造一个Error对象并查看“stack”属性:

$(function() {
  function a() {
    b();
  }

  function b() {
    c();
  }

  function c() {
    $('#e').html(new Error().stack.replace(/\n/g, '<br>'));
  }

  a();
});

JSBin

那将显示:

c@http://jsbin.com/aLuKUSU/1:33
b@http://jsbin.com/aLuKUSU/1:29
a@http://jsbin.com/aLuKUSU/1:25
@http://jsbin.com/aLuKUSU/1:36
b.Callbacks/c@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
b.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
.ready@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3
H@http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js:3

Error对象的“stack”属性未标准化,但在Firefox,Chrome,IE10 +和Safari 6中可用。(不了解移动浏览器。)