JavaScript: Wie drucke ich eine Nachricht an die Fehlerkonsole?


Antworten:


469

Installieren Sie Firebug und dann können Sie console.log(...)und console.debug(...)usw. verwenden ( weitere Informationen finden Sie in der Dokumentation ).


14
@Dan: Der WebKit Web Inspector unterstützt auch die FireBug-Konsolen-API
olliej

160
Warum ist dies die akzeptierte Antwort? Er fragte nicht, wie man in die Firebug-Konsole schreibt, sondern wie man in die Fehlerkonsole schreibt. kein Schwanz oder so zu sein, nur darauf hinzuweisen.
Matt Lohkamp

127
+1. Zum Nutzen aller, die jetzt zu dieser Frage kommen, ist darauf hinzuweisen, dass seit Beantwortung der Frage alle Browser das Konsolenobjekt implementiert haben, sodass console.log()usw. in allen Browsern, einschließlich IE, funktionieren sollte. In allen Fällen muss jedoch das Debugger-Fenster zu diesem Zeitpunkt geöffnet sein, da sonst Aufrufe von consoleFehler verursachen.
Spudley

2
@andrewjackson Wie bereits erwähnt, funktioniert console.log in allen modernen Browsern, einschließlich IE, einwandfrei. Ihr Code ist immer noch vollkommen gültig und nützlich, wenn Sie ältere Browser unterstützen möchten (und wenn Sie an einer öffentlichen Website arbeiten, sollten Sie es unbedingt tun!). Meine Kritik ist jedoch nur, dass Ihr Kommentar irreführend / nicht korrekt ist.
BrainSlugs83

1
console.debug () hingegen existiert im IE nicht. Wir können das umgehen mit: 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

Sie können Ihren Protokollierungsnachrichten auch CSS hinzufügen:

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


10
Dies ist die richtige Antwort. Das Wort "Fehler" wird in der ausgewählten Antwort nicht einmal erwähnt, obwohl es im Fragentitel steht.
Ivan Durst

3
Das zusätzliche bisschen über das Hinzufügen von CSS macht ziemlich viel Spaß. +1!
Sudo Make Install

@ORMapper Was funktioniert dort nicht? Das CSS nehme ich an?
Nicholas

2
In dem Moment, in dem Sie feststellen, dass Sie in all den Jahren der console.logVerwendung CSS in der Konsole verwenden können: |
Red

86

Ausnahmen werden in der JavaScript-Konsole protokolliert. Sie können dies verwenden, wenn Sie Firebug deaktiviert lassen möchten .

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

Verwendungszweck:

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

8
Wenn in einigen Browsern das Debuggen aktiviert ist, werden Popup-Meldungen ausgegeben.
BrainSlugs83

Könnten Sie bitte erklären, warum das throwin ein eingewickelt werden muss setTimeout?
Antony

55

Eine gute Möglichkeit, dies browserübergreifend zu tun, ist das Debuggen von JavaScript: Werfen Sie Ihre Warnungen weg! .


7
throw () ist ein großartiger Vorschlag - dies sollte die gewählte Antwort sein.
Matt Lohkamp

17
Einverstanden ist dies ein browserübergreifender Ansatz. Aber ... Unterscheidet sich eine Ausnahme nicht grundlegend von der Protokollierung von Nachrichten?
Robin Maben

14
Wenn Sie dagegen eine Ausnahme auslösen, wird die Ausführung des aktuellen "Threads" (wie von Yuval A angegeben) gestoppt und im Catch fortgesetzt, falls vorhanden. Ich bezweifle, dass dies erwünscht ist.
dlaliberte

7
throw()ist definitiv nicht der Weg, dies zu tun. Sie werden früher oder später in Schwierigkeiten geraten. für mich war es früher :(
Hugo Mota

4
@Ian_Oxley: Es war irgendwann ausgefallen, jetzt ist es wieder in Betrieb, aber das Posten des Codes hier ist immer noch besser und wird von Best Practices für Stackoverflow empfohlen.
woohoo

15

Hier finden Sie eine Lösung für die wörtliche Frage, wie eine Nachricht an die Fehlerkonsole des Browsers und nicht an die Debugger-Konsole gedruckt werden soll. (Es kann gute Gründe geben, den Debugger zu umgehen.)

Wie ich in Kommentaren zu dem Vorschlag bemerkt habe, einen Fehler auszulösen, um eine Nachricht in der Fehlerkonsole zu erhalten, besteht ein Problem darin, dass dies den Ausführungsthread unterbricht. Wenn Sie den Thread nicht unterbrechen möchten, können Sie den Fehler in einen separaten Thread werfen, der mit setTimeout erstellt wurde. Daher meine Lösung (die sich als eine Ausarbeitung der von Ivo Danihelka herausstellt):

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

Ich gebe die Zeit in Millisekunden seit der Startzeit an, da das Zeitlimit die Reihenfolge verzerren kann, in der Sie möglicherweise die Nachrichten sehen.

Das zweite Argument für die Error-Methode betrifft den Dateinamen, bei dem es sich um eine leere Zeichenfolge handelt, um die Ausgabe des nutzlosen Dateinamens und der Zeilennummer zu verhindern. Es ist möglich, die Anruferfunktion zu erhalten, jedoch nicht auf einfache, browserunabhängige Weise.

Es wäre schön, wenn wir die Nachricht mit einem Warn- oder Nachrichtensymbol anstelle des Fehlersymbols anzeigen könnten, aber ich kann keinen Weg finden, dies zu tun.

Ein weiteres Problem bei der Verwendung von Throw besteht darin, dass es von einem umschließenden Try-Catch gefangen und weggeworfen werden kann. Wenn Sie den Throw in einen separaten Faden legen, wird dieses Hindernis ebenfalls vermieden. Es gibt jedoch noch eine andere Möglichkeit, wie der Fehler abgefangen werden kann, wenn der window.onerror-Handler durch einen ersetzt wird, der etwas anderes bewirkt. Kann dir da nicht helfen.


15

Wenn Sie Safari verwenden , können Sie schreiben

console.log("your message here");

und es erscheint direkt auf der Konsole des Browsers.


11
Alle modernen Browser unterstützen console.log().
JJJ

2
Alle modernen Browser unterstützen JETZT console.log(). Es war bis vor kurzem nicht wahr.
Bryce

9

Um die Frage tatsächlich zu beantworten:

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

Anstelle von Fehlern können Sie auch info, log oder warn verwenden.


Ihre Antwort scheint am besten zu sein, aber laut Mozillas MDN-Seite handelt es sich console.error(..)um eine nicht standardmäßige Funktion, die nicht in der Produktion verwendet werden sollte. Wie sehen Sie das? Haben Sie Vorschläge für einen unerfahrenen Programmierer, der console.errorvs verwendet console.log?
Modulitos

Das ist interessant. Wir sollten das dann nicht benutzen. Danke für die Info, Lucas.
Yster

2
MDN hält dies ebenfalls für console.log(...)"nicht standardisiert". In dieser Hinsicht console.errorist so stabil wie console.log.
Mike Rapadas

1
@ Lucas Wen interessiert es, ob es Standard ist? Wer wird die Konsolenprotokollierung für die Produktion verwenden?
Andrew

Console.error funktioniert jetzt in allen gängigen Browsern. Sogar IE8. Siehe developer.mozilla.org/en-US/docs/Web/API/Console/error
Red



5

Ein Hinweis zu 'throw ()', der oben erwähnt wurde. Es scheint, dass die Ausführung der Seite vollständig gestoppt wird (ich habe IE8 überprüft), daher ist es nicht sehr nützlich, um "laufende Prozesse" zu protokollieren (um eine bestimmte Variable zu verfolgen ...)

Mein Vorschlag ist vielleicht, irgendwo in Ihrem Dokument ein Textbereichselement hinzuzufügen und seinen Wert (der seinen Text ändern würde ) zu ändern (oder an ihn anzuhängen ), um Informationen bei Bedarf zu protokollieren ...


Ich vermute, das liegt daran, dass Sie die Frage des OP nicht beantwortet haben. Um auf die JS - Konsole zu drucken, müssen Sie eine integrierte Methode wie verwenden console.log(), throw()etc. Darüber hinaus gibt es nichts falsch mit dem Verhalten , throw()wie Sie scheinen zu implizieren , - die Tatsache , dass es stoppt die Ausführung ist beabsichtigt und dokumentiert ( Entwickler. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) und es stimmt damit überein, wie Ausnahmen in anderen Programmiersprachen ausgelöst / abgefangen werden. (Wenn Sie den Inhalt einer Variablen protokollieren möchten, ohne die Ausführung zu stoppen, console.log()ist dies der Fall .)
Sean the Bean

@SeantheBean, ursprünglich gab es eine Diskussion über die Tatsache, dass IE nicht unterstützte console.log- also gaben die Leute Alternativen. Es ist natürlich beabsichtigt, throw()die Ausführung zu stoppen , niemand hat gesagt, dass dies nicht der Fall ist. Das ist der Grund, warum es normalerweise keine gute Möglichkeit ist, Debug-Informationen zur Laufzeit zu protokollieren, was das OP wollte ...
Yuval A.

5

Wie immer ist Internet Explorer der große Elefant in Rollschuhen, der Sie davon abhält, einfach nur zu benutzen console.log().

Das Protokoll von jQuery kann recht einfach angepasst werden, ist jedoch ein Problem, da es überall hinzugefügt werden muss. Eine Lösung, wenn Sie jQuery verwenden, besteht darin, es am Ende in Ihre jQuery-Datei einzufügen.

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;
    }
}

Es wird jetzt als Erweiterung von jQuery akzeptiert, aber wäre es nicht effizienter zu prüfen, ob "Konsolen" - und "Opern" -Objekte vorhanden sind, bevor eine Ausnahme abgefangen wird?
Danubian Sailor

@lechlukasz Ich denke, Sie können den Overhead der Erweiterung sparen und einfach console.log plus diese IE-Prüfung verwenden: stackoverflow.com/questions/1215392/…
Chris S


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");

Ich arbeite für mich. Ich suche danach. Ich habe Firefox verwendet. Hier ist mein Skript.

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

funktioniert in Firefox und Chrome.



1

Um Ihre Frage zu beantworten, können Sie ES6-Funktionen verwenden:

var var=10;
console.log(`var=${var}`);

0

Dies wird nicht auf der Konsole gedruckt, sondern öffnet ein Warn-Popup mit Ihrer Nachricht, das für einige Fehlerbehebungen hilfreich sein kann:

mach einfach:

alert("message");

Das ist nichts gemeinsam mit dem, was OP gefragt hat
Zefir Zdravkov

0

Mit der es6-Syntax können Sie Folgendes verwenden:

console.log(`x = ${x}`);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.