Jak wydrukować komunikat do konsoli błędów, najlepiej ze zmienną?
Na przykład coś takiego:
print('x=%d', x);
Jak wydrukować komunikat do konsoli błędów, najlepiej ze zmienną?
Na przykład coś takiego:
print('x=%d', x);
Odpowiedzi:
Zainstalować Firebug , a następnie można użyć console.log(...)
i console.debug(...)
, itd. (Patrz dokumentację na więcej).
console.log()
itp. Powinny działać we wszystkich przeglądarkach, w tym IE. Jednak we wszystkich przypadkach musisz mieć otwarte okno debugera, w przeciwnym razie wywołania console
będą generować błędy.
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
Możesz także dodać CSS do swoich wiadomości logowania:
console.log('%c My message here', "background: blue; color: white; padding-left:10px;");
console.log
możesz używać css wewnątrz konsoli: |
Wyjątki są rejestrowane w konsoli JavaScript. Możesz go użyć, jeśli chcesz wyłączyć Firebug .
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Stosowanie:
log('Hello World');
log('another message');
throw
należy je owinąć setTimeout
?
Jeden dobry sposób, aby to zrobić, działający w różnych przeglądarkach, został opisany w Debugowaniu JavaScript: Odrzuć swoje alerty! .
throw()
zdecydowanie nie jest na to sposobem. wcześniej czy później wpadniesz w kłopoty. dla mnie było to wcześniej :(
Oto rozwiązanie dosłownego pytania o to, jak wydrukować komunikat na konsoli błędów przeglądarki, a nie konsoli debuggera. (Mogą istnieć dobre powody, aby ominąć debugger).
Jak zauważyłem w komentarzach dotyczących sugestii, aby zgłosić błąd, aby uzyskać komunikat w konsoli błędów, jednym problemem jest to, że przerwie to wątek wykonania. Jeśli nie chcesz przerywać wątku, możesz wrzucić błąd do osobnego wątku, utworzonego przy użyciu setTimeout. Stąd moje rozwiązanie (które okazuje się być opracowaniem Ivo Danihelki):
var startTime = (new Date()).getTime();
function logError(msg)
{
var milliseconds = (new Date()).getTime() - startTime;
window.setTimeout(function () {
throw( new Error(milliseconds + ': ' + msg, "") );
});
}
logError('testing');
Uwzględniam czas w milisekundach od czasu rozpoczęcia, ponieważ limit czasu może zniekształcić kolejność wyświetlania komunikatów.
Drugi argument metody Error dotyczy nazwy pliku, która jest tutaj pustym ciągiem, aby zapobiec wyświetlaniu niepotrzebnej nazwy pliku i numeru wiersza. Możliwe jest uzyskanie funkcji dzwoniącego, ale nie w prosty, niezależny od przeglądarki sposób.
Byłoby miło, gdybyśmy mogli wyświetlić wiadomość z ikoną ostrzeżenia lub wiadomości zamiast ikony błędu, ale nie mogę znaleźć sposobu, aby to zrobić.
Innym problemem związanym z użyciem rzutu jest to, że może zostać złapany i wyrzucony przez otaczający try-catch, a umieszczenie rzutu w oddzielnym wątku pozwala również uniknąć tej przeszkody. Istnieje jednak jeszcze inny sposób na wychwycenie błędu, czyli zastąpienie modułu obsługi window.onerror programem, który robi coś innego. Nie mogę ci tam pomóc.
Aby odpowiedzieć na pytanie:
console.error('An error occurred!');
console.error('An error occurred! ', 'My variable = ', myVar);
console.error('An error occurred! ' + 'My variable = ' + myVar);
Zamiast błędu możesz także użyć informacji, zalogować się lub ostrzec.
console.error(..)
jest to niestandardowa funkcja i nie należy jej używać w produkcji. Jakie jest twoje zdanie? Czy masz jakieś sugestie dotyczące początkującego programisty używającego console.error
vs console.log
?
console.log(...)
„niestandardowe”. Pod tym względem console.error
jest tak stabilny jak console.log
.
Jeśli używasz Firebug i potrzebujesz obsługi IE, Safari lub Opera, Firebug Lite dodaje obsługę console.log () do tych przeglądarek.
WebKit Web Inspector obsługuje również Firebug w konsoli API (tylko niewielkim dodatkiem do odpowiedzi Dana ).
Uwaga na temat wspomnianego wyżej „throw ()”. Wygląda na to, że całkowicie zatrzymuje wykonywanie strony (sprawdziłem w IE8), więc nie jest to bardzo przydatne do rejestrowania „trwających procesów” (np. Do śledzenia pewnej zmiennej ...)
Moją sugestią jest być może dodanie elementu textarea gdzieś w twoim dokumencie i zmiana (lub dołączenie) jego wartości (która zmieniłaby jego tekst) do rejestrowania informacji w razie potrzeby ...
console.log()
, throw()
itp. Ponadto nie ma nic złego w zachowaniu, throw()
jak się wydaje, że sugerujesz - fakt, że zatrzymuje on wykonywanie jest celowe i udokumentowane ( programista. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) i jest zgodny z tym, jak wyjątki są zgłaszane / wychwytywane w innych językach programowania. (Jeśli chcesz zalogować zawartość zmiennej bez zatrzymywania wykonywania, to jest to po co console.log()
.)
console.log
- więc ludzie dawali alternatywy. O throw()
zatrzymaniu egzekucji, oczywiście jest to celowe, nikt nie powiedział, że nie. Dlatego zazwyczaj nie jest to dobry sposób na rejestrowanie informacji debugowania w środowisku wykonawczym, czego chciał PO
Jak zawsze, Internet Explorer jest wielkim słoniem w rolkach, który po prostu Cię zatrzymuje console.log()
.
Dziennik jQuery można dość łatwo dostosować, ale trzeba go wszędzie dodawać. Jednym z rozwiązań, jeśli używasz jQuery, jest umieszczenie go w pliku jQuery na końcu, najpierw:
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;
}
}
Odwiedź https://developer.chrome.com/devtools/docs/console-api, aby uzyskać pełne odniesienie do interfejsu API konsoli
console.error(object[Obj,....])\
W takim przypadku obiekt będzie ciągiem błędów
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");
Najprostszym sposobem na to jest:
console.warn("Text to print on console");
Aby odpowiedzieć na twoje pytanie, możesz użyć funkcji ES6,
var var=10;
console.log(`var=${var}`);
To nie jest drukowane w konsoli, ale otworzy Ci się wyskakujące okienko z komunikatem, które może być przydatne w przypadku niektórych debugowania:
po prostu zrób:
alert("message");