JavaScript: Wie drucke ich eine Nachricht an die Fehlerkonsole?

438

Wie kann ich eine Nachricht an die Fehlerkonsole drucken, vorzugsweise mit einer Variablen?

Zum Beispiel so etwas wie:

print('x=%d', x);
Mark Harrison
quelle
8
Über welche Konsole sprichst du? Browserkonsole oder JavaScript-Framework-spezifische Konsole?
Eric Schoonover
In Verbindung stehender Beitrag - Chrome: console.log, console.debug funktionieren nicht
RBT

Antworten:

469

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

Dan
quelle
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;");
Nikolaus
quelle
8
Dokumentation für Chrome: developer.google.com/chrome-developer-tools/docs/console
mrzmyr
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');
Ivo Danihelka
quelle
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! .

Ian Oxley
quelle
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.

dlaliberte
quelle
15

Wenn Sie Safari verwenden , können Sie schreiben

console.log("your message here");

und es erscheint direkt auf der Konsole des Browsers.

Lukas
quelle
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.

Yster
quelle
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
8

Wenn Sie Firebug verwenden und auch IE, Safari oder Opera unterstützen müssen, fügt Firebug Lite diesen Browsern die Unterstützung console.log () hinzu.

Devon
quelle
2
Wow .. Firebug Lite ist fantastisch
Dexter
6

Der WebKit Web Inspector unterstützt auch die Konsolen-API von Firebug (nur eine kleine Ergänzung zu Dans Antwort ).

olliej
quelle
Sehr schönes WebKit unterstützt es. Es wird also ziemlich weit verbreitet unterstützt. Großartig!
Albus Dumbledore
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 ...

Yuval A.
quelle
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;
    }
}
Chris S.
quelle
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");

Parth Raval
quelle
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.

DK
quelle
1

Der einfachste Weg, dies zu tun, ist:

console.warn("Text to print on console");
Kenneth John Falbous
quelle
1

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

var var=10;
console.log(`var=${var}`);
Aniket Kulkarni
quelle
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");
mmm
quelle
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}`);
jkordas
quelle