我有一个轻量级的日志功能。为了保持简单,例如:
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?的副本,但事实并非如此。关于找到当前行号的问题
。答案 0 :(得分:2)
您可以构造一个Error对象并查看“stack”属性:
$(function() {
function a() {
b();
}
function b() {
c();
}
function c() {
$('#e').html(new Error().stack.replace(/\n/g, '<br>'));
}
a();
});
那将显示:
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中可用。(不了解移动浏览器。)