JavaScript:如何将消息打印到错误控制台?


Answers:


469

安装 Firebug,然后可以使用console.log(...)console.debug(...)等(有关更多信息,请参见文档)。


14
@Dan:WebKit Web Inspector还支持FireBug控制台API
olliej

160
为什么这是公认的答案?他没有询问如何写入Firebug控制台,而是询问如何写入错误控制台。不是鸡巴或任何东西,只是指出来。
matt lohkamp

127
+1。为了对现在提出这个问题的所有人都有利,值得指出的是,自从回答问题以来,所有浏览器现在都实现了控制台对象,因此console.log()etc应该在所有浏览器(包括IE)中都可以使用。但是,在所有情况下,都需要同时打开调试器窗口,否则调用console将产生错误。
Spudley

2
如前所述,@ andrewjackson,console.log在包括IE在内的所有现代浏览器中均可正常运行。如果您打算支持较旧的浏览器(并且如果您使用的是公共网站,则可以肯定!),您的代码仍然是完全有效和有用的,但是我的批评只是您的评论具有误导性/不准确。
BrainSlugs83

1
另一方面,IE中不存在console.debug()。我们可以通过以下方法解决此问题:if(!console.debug){console.debug = function(args){console.log(args); }}
Rovanion

318
console.error(message); //gives you the red errormessage
console.log(message); //gives the default message
console.warn(message); //gives the warn message with the exclamation mark in front of it
console.info(message); //gives an info message with an 'i' in front of the message

您还可以将CSS添加到日志消息中:

console.log('%c My message here', "background: blue; color: white; padding-left:10px;");


10
这是正确的答案。所选答案中甚至没有提到“错误”一词,尽管它在问题标题中。
伊万·杜斯特

3
添加CSS的额外乐趣很有趣。+1!
sudo make install

@ORMapper什么在那里不起作用?我假设的CSS?
Nicholas

2
当您意识到这一点后,这些年来使用console.log您就可以在控制台内使用CSS了:
红色

86

异常记录到JavaScript控制台中。如果要禁用Firebug,可以使用该选项。

function log(msg) {
    setTimeout(function() {
        throw new Error(msg);
    }, 0);
}

用法:

log('Hello World');
log('another message');

8
在某些浏览器中,如果启用了调试,这将引发弹出消息。
BrainSlugs83

您能否解释一下为什么throw必须将其包装在setTimeout
安东尼

55

调试JavaScript:概述了一种实现跨浏览器工作的好方法:丢掉您的警报!


7
throw()是一个很好的建议-这应该是选择的答案。
matt lohkamp

17
同意,这是一种跨浏览器方法。但是..引发异常与记录消息不是根本不同吗?
罗宾·马本

14
另一方面,引发异常将停止当前“线程”的执行(如Yuval A所述),如果有异常,则在catch中继续执行。我怀疑这是所期望的。
dlaliberte 2011年

7
throw()绝对不是这样做的方法。迟早会惹上麻烦。对我来说,这是更快的:(
雨果·莫塔

4
@Ian_Oxley:在某个时候它已经关闭,现在又备份了,但是在这里发布代码仍然更好,并且由stackoverflow最佳实践推荐。
woohoo,2012年

15

这是一个关于如何将消息打印到浏览器的错误控制台而不是调试器控制台的字面问题的解决方案。(可能有充分的理由绕过调试器。)

正如我在有关在错误控制台中引发错误以获取消息的建议的注释中所指出的那样,一个问题是这将中断执行线程。如果您不想中断该线程,则可以将错误引发到一个单独的线程中,该线程是使用setTimeout创建的。因此,我的解决方案(原来是Ivo Danihelka提出的解决方案):

var startTime = (new Date()).getTime();
function logError(msg)
{
  var milliseconds = (new Date()).getTime() - startTime;
  window.setTimeout(function () {
    throw( new Error(milliseconds + ': ' + msg, "") );
  });
}
logError('testing');

我包括自开始时间以来的时间(以毫秒为单位),因为超时可能会歪曲您可能希望看到消息的顺序。

Error方法的第二个参数用于文件名,此处为空字符串,以防止输出无用的文件名和行号。可以获取调用者功能,但不能以独立于浏览器的简单方式获得。

如果我们可以显示带有警告或消息图标而不是错误图标的消息,那就太好了,但我找不到解决方法。

使用throw的另一个问题是,它可能会被封闭的try-catch捕获并丢弃,并且将throw置于单独的线程中也可以避免该障碍。但是,还有另一种可以捕获错误的方式,即是否将window.onerror处理程序替换为执行不同操作的处理程序。不能在那帮你。


15

如果您使用Safari,则可以编写

console.log("your message here");

它就出现在浏览器的控制台上。


11
所有现代浏览器均支持console.log()
JJJ 2012年

2
现在所有现代浏览器都支持console.log()。直到最近才是事实。
布莱斯

9

实际回答问题:

console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);

除了错误,您还可以使用信息,日志或警告。


您的答案似乎是最好的,但是Mozilla的MDN页面说这console.error(..)是一项非标准功能,不应在生产中使用。你对此有什么看法?您对使用console.errorvs 的新手程序员有什么建议console.log吗?
modulitos

这是有趣的。那我们不应该使用这个。感谢您的信息,卢卡斯。
Yster 2015年

2
MDN也将其视为console.log(...)“非标准”。在这方面,console.error与一样稳定console.log
Mike Rapadas 2015年

1
@Lucas谁在乎它是否标准?谁将使用控制台日志记录进行生产?
安德鲁

Console.error现在可在所有主要浏览器中使用。甚至是IE8。参见developer.mozilla.org/zh-CN/docs/Web/API/Console/error
Red Red



5

关于上述'throw()'的注释。似乎它完全停止了页面的执行(我在IE8中检查了),因此对于记录“正在进行的进程”(例如跟踪某个变量...)不是很有用。

我的建议可能是在文档中的某个位置添加textarea元素,并在需要时更改(或附加)它的(这将更改其文本)以记录信息。


我猜是因为您没有回答OP的问题。要打印到JS控制台,您必须使用诸如console.log()throw()等的内置方法。此外,throw()您似乎暗示的行为也没有错-停止执行的事实是有意记录的(开发人员。 mozilla.org/zh-CN/docs/Web/JavaScript/Reference/…),并且与其他编程语言中引发/捕获异常的方式保持一致。(如果要在不停止执行的情况下记录变量的内容,那console.log()
要这样做的

@SeantheBean,最初是关于IE不支持这一事实的讨论console.log-因此人们提供了替代方案。关于throw()停止执行,这当然是故意的,没有人说不是。这就是为什么它通常不是在运行时记录调试信息的好方法,这是OP想要的...
Yuval A.

5

与往常一样,Internet Explorer是旱冰鞋中的大大象,仅使用它就可以阻止您console.log()

jQuery的日志可以很容易地修改,但是很难在任何地方添加它。如果您使用的是jQuery,则一种解决方案是将其放在最后的jQuery文件中(首先缩小):

function log()
{
    if (arguments.length > 0)
    {
        // Join for graceful degregation
        var args = (arguments.length > 1) ? Array.prototype.join.call(arguments, " ") : arguments[0];

        // This is the standard; Firebug and newer WebKit browsers support this.
        try {
            console.log(args);
            return true;
        } catch(e) {
            // Newer Opera browsers support posting erros to their consoles.
            try {
                opera.postError(args);
                return true;
            } 
            catch(e) 
            {
            }
        }

        // Catch all; a good old alert box.
        alert(args);
        return false;
    }
}

现在它已被接受为jQuery的扩展,但是在捕获异常之前检查“控制台”和“歌剧”对象是否存在会更有效吗?
Danubian Sailor

@lechlukasz我想你可以保存扩展,只是使用的console.log的开销,再加上这个IE检查:stackoverflow.com/questions/1215392/...
克里斯小号


3

function foo() {
  function bar() {
    console.trace("Tracing is Done here");
  }
  bar();
}

foo();

console.log(console); //to print console object
console.clear('console.clear'); //to clear console
console.log('console.log'); //to print log message
console.info('console.info'); //to print log message 
console.debug('console.debug'); //to debug message
console.warn('console.warn'); //to print Warning
console.error('console.error'); //to print Error
console.table(["car", "fruits", "color"]);//to print data in table structure
console.assert('console.assert'); //to print Error
console.dir({"name":"test"});//to print object
console.dirxml({"name":"test"});//to print object as xml formate

To Print Error:- console.error('x=%d', x);

console.log("This is the outer level");
console.group();
console.log("Level 2");
console.group();
console.log("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.log("Back to level 2");
console.groupEnd();
console.log("Back to the outer level");


1
console.log("your message here");

为我工作..我正在搜索..我使用了Firefox。这是我的脚本。

 $('document').ready(function() {
console.log('all images are loaded');
});

适用于Firefox和Chrome。




0

这不会打印到控制台,但是会向您打开一个警告弹出窗口,其中包含您的消息,这可能对某些调试很有用:

做就是了:

alert("message");

这是在没有什么OP问常见
Zefir Zdravkov

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.