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

Mar*_*son 433 javascript debugging

如何将消息打印到错误控制台,最好包括变量?

例如,类似于:

print('x=%d', x);
Run Code Online (Sandbox Code Playgroud)

Dan*_*Dan 465

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

  • 为什么这是公认的答案?他没有问如何写入firebug控制台,他问如何写入错误控制台.不是一个鸡巴或任何东西,只是指出来. (157认同)
  • +1.并且为了现在遇到这个问题的任何人的利益,值得指出的是,自问题得到解答后,所有浏览器现在都实现了控制台对象,因此`console.log()`等应该适用于所有浏览器,包括IE.但是,在所有情况下,您需要在此时打开调试器窗口,否则调用`console`将产生错误. (125认同)
  • if(!console)console = {log:function(){}}; // IE中没有错误 (21认同)
  • @Dan:WebKit Web Inspector还支持FireBug控制台API (14认同)
  • 如前所述@andrewjackson,console.log在包括IE在内的所有现代浏览器中都能正常工作.如果你打算支持旧的浏览器,你的代码仍然是完全有效和有用的(如果你在公共网站上工作,你肯定应该!),但我的批评只是你的评论是误导/不准确. (2认同)

Nic*_*las 312

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这是正确的答案.在选定的答案中甚至没有提到"错误"这个词,尽管它在问题标题中. (10认同)
  • Chrome文档:https://developers.google.com/chrome-developer-tools/docs/console (8认同)
  • 关于添加CSS的额外信息非常有趣.+1! (3认同)
  • 当你意识到,这些年来使用 `console.log` 你就可以在控制台中使用 css 了:| (3认同)

Ivo*_*lka 86

异常将记录到JavaScript控制台中.如果您想要禁用Firebug,可以使用它.

function log(msg) {
    setTimeout(function() {
        throw new Error(msg);
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)

用法:

log('Hello World');
log('another message');
Run Code Online (Sandbox Code Playgroud)

  • 在某些浏览器中,如果启用了调试,则会弹出弹出消息. (8认同)

Ian*_*ley 55

调试JavaScript:抛出警报,概述了跨浏览器工作的一种好方法!.

  • 同意,这是一种跨浏览器的方法.但是..是不是抛出一个与记录消息根本不同的异常? (17认同)
  • 另一方面,抛出异常将停止当前"线程"的执行(如Yuval A所述),如果有则恢复它.我怀疑这是你想要的. (14认同)
  • throw()是一个很好的建议 - 这应该是选择的答案. (7认同)
  • `throw()`绝对不是这样做的方法.你迟早会遇到麻烦.对我来说它更早:( (7认同)
  • @Ian_Oxley:它在某个时候有所下降,现在已经恢复了,但是在这里发布代码仍然更好,并且建议使用stackoverflow最佳实践. (4认同)

小智 15

如果你使用Safari,你可以写

console.log("your message here");
Run Code Online (Sandbox Code Playgroud)

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

  • 所有现代浏览器都支持`console.log()`. (11认同)
  • 所有现代浏览器现在都支持``console.log()``.直到最近才是真的. (2认同)

dla*_*rte 14

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

正如我在评论中提到的,在错误控制台中抛出错误以获取消息的建议时,一个问题是这将中断执行的线程.如果您不想中断该线程,可以将错误抛出到一个单独的线程中,一个使用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');
Run Code Online (Sandbox Code Playgroud)

我包括自开始时间以来的时间(以毫秒为单位),因为超时可能会使您希望看到消息的顺序发生偏差.

Error方法的第二个参数是文件名,这里是一个空字符串,以防止输出无用的文件名和行号.可以获得调用者函数,但不能以简单的浏览器独立方式.

如果我们可以使用警告或消息图标而不是错误图标显示消息,那将是很好的,但我找不到这样做的方法.

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


Yst*_*ter 9

要真正回答这个问题:

console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
Run Code Online (Sandbox Code Playgroud)

您也可以使用信息,日志或警告,而不是错误.

  • [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Console/log)也认为`console.log(...)`"非标准".在这方面,`console.error`和`console.log`一样稳定. (2认同)

Dev*_*von 8

如果您使用Firebug并且需要支持IE,Safari或Opera,Firebug Lite会为这些浏览器添加console.log()支持.

  • 哇.. Firebug Lite太棒了 (2认同)

oll*_*iej 5

WebKit的网络督察还支持Firebug的控制台API(只是一个小除了丹的答案).


Yuv*_* A. 5

关于上面提到的'throw()'的说明.它似乎完全停止了页面的执行(我在IE8中检查过),所以它对于记录"正在进行的进程"(比如跟踪某个变量......)并不是很有用.

我的建议可能是在文档的某处添加一个textarea元素,并在需要时更改(或附加)其(可以更改其文本)以记录信息...


Chr*_*s S 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;
    }
}
Run Code Online (Sandbox Code Playgroud)