如何将console.log()的结果存储为一个对象/变量?

3
我希望能将console.log()函数的输出保存为一个对象或变量。我主要想要得到对象结果以及行号。
以下内容仅用于演示我所需的内容:
var myobj = {"key":"value"}; // (<< in 'myjs.js, line 123)
var mylog = console.log( myobj );

// output mylog: {"key":"value"}, myjs.js:123

非常感谢您的帮助!


console.log() 不返回任何值... 因此不能使用 console.log - Arun P Johny
实际上,myObj 就是 myLog,只需要给它赋值即可。 - Moazzam Khan
从技术上讲,您可以在控制台的原型中覆盖该函数,但这似乎是一个可怕的想法。 - Fenixp
你想将输出保存为字符串还是对象? - Moazzam Khan
我更倾向于使用一个对象,但由于我主要关注行号,所以作为字符串也会非常有帮助。 - Elvis
4个回答

2

您可以使用new Error().lineNumber来获取行号。了解有关确定行号的更多信息,请访问确定行号


1
这是一个非常有趣的提示,谢谢! 不幸的是,Error()似乎没有console()那么跨浏览器兼容。 如果有一种方法可以捕获控制台输出,我更喜欢这个。 到目前为止,这个方法非常接近! - Elvis

1
你可以覆盖 console.log 并调用 Error().stack,在 Google Chrome 中它会显示行号。
在 Google Chrome 中,堆栈看起来像这样:
Error
    at Error (<anonymous>)
    at Console.console.log (http://localhost/test.js:6:27)
    at foo (http://localhost/test.js:13:13)
    at http://localhost/test.js:16:1 

因此,代码需要获取3行并删除"at http://localhost"和字符数。

(function(log) {
    console.log = function(o) {
        var stack = Error().stack.split('\n');
        log.call(console, JSON.stringify(o) + ', ' + stack[3].
            replace(/.*http:\/\/[^\/]*|:[0-9]+\)$/g, ''));
    };
})(console.log);


function foo() {
    console.log({foo: 'bar'});
}

foo();

0

你可以从链接阅读console.log的输出尝试这个。

function myFunctionThatMightHaveAnError(){
    // instead of just failing silently, actually throw an error
    $.error("My special error");
}
// Then use a try/catch block to handle it
try {
    myFunctionThatMightHaveAnError();
    alert("No error!"); // this line would only run if no error were thrown
} catch (e) {
    if(e == "My special error") {
        // Handle error
    }
}

谢谢!我自己也做了一个类似的解决方法,但是我不知道如何捕获行号。 - Elvis
这段代码实际上是捕获函数的错误输出,因此从技术上讲,您并没有读取console.log,因为您无法读取控制台...就我目前的知识而言, 因此,使用此代码无法捕获行号...或任何其他信息。 - MaveRick

0

尝试保存myObj对象。 这就是记录器将记录的内容。


我想同时收到行号。 - Elvis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接