是否可以使用一些javascript技巧告诉console.log
它应该输出哪个行号?
假设我们有以下简单示例:
function Logger () {
this.debug = function(msg) {
// do some stuff with msg
console.log(msg);
};
}
var log = new Logger();
log.debug("Hello");
如果您打开该页面,Chrome会显示以下内容:
这表示该消息已记录在main.js:4
,但我真正想要的是它显示main.js:9
。因为第9行是调用记录器的地方。
对于这个简单的情况,它并没有太大的区别,但是当Logger在一个单独的文件中时,它总是显示logger.js
而不是调用记录器的类。
Logger类应该对记录的消息做一些额外的事情(例如将其发送到服务器),因此我不能只使用this.debug = console.log
。
修改:
已经有一些类似的问题,但是所有这些问题都只是在输出中添加了一条额外的行,而这些行无法点击以跳转到相应的行:
答案 0 :(得分:1)
我想到的第一件事是创建一个新的Error
对象来获取堆栈跟踪,然后找到调用方法的行,如下所示:
function Logger () {
this.debug = function(msg) {
// do some stuff with msg
//TODO: document this line
var callerLine = new Error().stack.split('\n')[2];
console.log(msg, callerLine);
};
}
var log = new Logger();
log.debug("Hello");
基本上我在每个换行符中拆分错误的堆栈并忽略第一行和第二行(错误消息和堆栈中自己的方法)。