JavaScript: Как напечатать сообщение на консоли ошибок?

438

Как я могу напечатать сообщение на консоль ошибок, желательно с переменной?

Например, что-то вроде:

print('x=%d', x);
Марк Харрисон
источник
8
О какой консоли вы говорите? Консоль браузера или специфичная для JavaScript платформа?
Эрик Шуновер

Ответы:

470

Установите Firebug, а затем вы можете использовать console.log(...)и console.debug(...), и т. Д. (См. Документацию для более).

Дэн
источник
14
@Dan: WebKit Web Inspector также поддерживает FireBug консоли API
olliej
160
почему это принятый ответ? он не спрашивал, как записать в консоль firebug, он спросил, как записать в консоль ошибок. не быть членом или чем-то еще, просто указывая на это.
Мэтт Лохкамп
127
+1. И в интересах любого, кто придет к этому вопросу сейчас, стоит указать, что, поскольку на вопрос был дан ответ, все браузеры теперь реализовали объект консоли, поэтому console.log()etc должна работать во всех браузерах, включая IE. Тем не менее, во всех случаях вам необходимо открыть окно отладчика, в противном случае обращения к consoleвызовут ошибки.
Спадли,
2
@andrewjackson, как отмечалось ранее, console.log прекрасно работает во всех современных браузерах, включая IE. Ваш код по-прежнему совершенно действителен и полезен, если вы намереваетесь поддерживать старые браузеры (и если вы работаете на общедоступном веб-сайте, вы уверены, что черт возьми!), Однако моя критика заключается только в том, что ваш комментарий вводит в заблуждение / не является точным.
BrainSlugs83
1
console.debug (), с другой стороны, не существует в IE. Мы можем обойти это с помощью: if (! Console.debug) {console.debug = function (args) {console.log (args); }}
Рованион
319
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;");
Николас
источник
8
Документация для chrome: developers.google.com/chrome-developer-tools/docs/console
mrzmyr
10
Это правильный ответ. Слово «ошибка» даже не упоминается в выбранном ответе, хотя оно есть в названии вопроса.
Иван Дерст
3
Дополнительная часть о добавлении CSS довольно забавная. +1!
sudo make install
@ORMapper Что там не работает? CSS я предполагаю?
Николас
2
В тот момент, когда вы понимаете, что все эти годы использования console.logвы можете использовать css внутри консоли: |
Red
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 () - отличное предложение - это должен быть выбранный ответ.
Мэтт Лохкамп
17
Согласитесь, это один кросс-браузерный подход. Но .. Разве выбрасывание исключения принципиально не отличается от регистрации сообщений?
Робин Мабен
14
С другой стороны, создание исключения остановит выполнение текущего «потока» (как отметил Ювал А) и возобновит его в перехвате, если таковое имеется. Я сомневаюсь, что это то, что желательно.
dlaliberte
7
throw()это определенно не способ сделать это. вы рано или поздно попадете в беду. для меня это было раньше :(
Хьюго Мота
4
@Ian_Oxley: в какой-то момент он был недоступен, теперь он восстановлен, но размещение кода прямо здесь все же лучше, и рекомендуется по рекомендациям stackoverflow.
Woohoo
15

Вот решение буквального вопроса о том, как напечатать сообщение в консоли ошибок браузера, а не в консоли отладчика. (Могут быть веские причины, чтобы обойти отладчик.)

Как я заметил в комментариях о предложении выдать ошибку, чтобы получить сообщение в консоли ошибок, одна проблема состоит в том, что это прервет поток выполнения. Если вы не хотите прерывать поток, вы можете выбросить ошибку в отдельный поток, созданный с помощью setTimeout. Отсюда мое решение (которое, как оказалось, было разработано Иво Данихелкой):

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 относится к имени файла, которое здесь является пустой строкой для предотвращения вывода бесполезного имени файла и номера строки. Можно получить функцию вызывающего абонента, но не простым браузерным способом.

Было бы хорошо, если бы мы могли отобразить сообщение со значком предупреждения или сообщения вместо значка ошибки, но я не могу найти способ сделать это.

Другая проблема с использованием броска состоит в том, что он может быть пойман и выброшен с помощью включающей попытки, и помещение броска в отдельный поток также позволяет избежать этого препятствия. Тем не менее, есть еще один способ, которым ошибка может быть перехвачена, а именно, если обработчик window.onerror заменен на другой, который делает что-то другое. Не могу помочь тебе там.

dlaliberte
источник
15

Если вы используете Safari , вы можете написать

console.log("your message here");

и он появляется прямо на консоли браузера.

Lukas
источник
11
Все современные браузеры поддерживают console.log().
JJJ
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);

Вместо ошибки вы также можете использовать информацию, войти или предупредить.

Yster
источник
Ваш ответ кажется лучшим, но на странице MDN в Mozilla говорится, console.error(..)что это нестандартная функция, и ее не следует использовать в производстве. Что вы думаете об этом? Есть ли у вас какие-либо предложения для начинающих программистов, использующих console.errorvs console.log?
модуль
Это интересно. Мы не должны использовать это тогда. Спасибо за информацию, Лукас.
Yster
2
MDN также считает console.log(...)«нестандартным». В связи с этим, console.errorтак же стабильно, как console.log.
Майк Рападас
1
@ Lucas Кому интересно, стандартно ли это? Кто будет использовать консольное ведение журнала для производства?
Андрей
Console.error теперь работает во всех основных браузерах. Даже IE8. См developer.mozilla.org/en-US/docs/Web/API/Console/error
Красный
8

Если вы используете Firebug и вам нужна поддержка IE, Safari или Opera, Firebug Lite добавляет поддержку console.log () в эти браузеры.

Девон
источник
2
Ух ты ... Firebug Lite - это круто
Декстер
6

WebKit Web Inspector также поддерживает Firebug в консоли API (только незначительное дополнение к ответу Дэ ).

olliej
источник
Очень хороший WebKit поддерживает это. Так что это довольно широко поддерживается тогда. Большой!
Альбус Дамблдор
5

Замечание о throw (), упомянутое выше. Кажется, что он полностью останавливает выполнение страницы (я проверил в IE8), поэтому он не очень полезен для регистрации «текущих процессов» (например, для отслеживания определенной переменной ...)

Возможно, я предлагаю добавить элемент textarea где-нибудь в вашем документе и изменить (или добавить) его значение (которое изменило бы его текст) для регистрации информации при необходимости ...

Ювал А.
источник
Я предполагаю, что это потому, что вы не ответили на вопрос ОП. Для печати на консоль JS необходимо использовать встроенный метод, например console.log(), throw()и т. Д. Кроме того, нет ничего плохого в поведении, throw()как вы, вероятно, подразумеваете, - тот факт, что он останавливает выполнение, является преднамеренным и задокументированным ( разработчик. mozilla.org/en-US/docs/Web/JavaScript/Reference/… ), и это согласуется с тем, как исключения генерируются / перехватываются в других языках программирования. (Если вы хотите записать содержимое переменной без остановки выполнения, вот для чего console.log().)
Шон Боб
@ SeantheBean, первоначально была дискуссия о том, что IE не поддерживает console.log- поэтому люди давали альтернативы. О throw()прекращении казни, конечно, это намеренно, никто не сказал, что это не так. Вот почему обычно это не очень хороший способ записывать отладочную информацию во время выполнения, чего хотел ОП ...
Юваль А.
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, но разве не было бы эффективно проверить, существуют ли объекты 'console' и 'opera', прежде чем перехватывать исключение?
Дунайский моряк
@lechlukasz Я думаю, вы можете сохранить накладные расходы на расширение и просто использовать console.log плюс эту проверку IE: 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");

работает для меня .. я ищу это .. я использовал Firefox. вот мой сценарий

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

работает в Firefox и Chrome.

DK
источник
1

Самый простой способ сделать это:

console.warn("Text to print on console");
Кеннет Джон Фалбоус
источник
1

Чтобы ответить на ваш вопрос, вы можете использовать функции ES6,

var var=10;
console.log(`var=${var}`);
Аникет Кулькарни
источник
0

Это не выводит на консоль, но откроет всплывающее окно с вашим сообщением, которое может быть полезно для некоторой отладки:

просто делать:

alert("message");
ммм
источник
Ничего общего с тем, что спросил ОП
Зефир Здравков
0

С синтаксисом es6 вы можете использовать:

console.log(`x = ${x}`);
jkordas
источник