JavaScript: как вывести сообщение на консоль ошибок?

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

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

print('x=%d', x);

О какой консоли вы говорите. Консоль браузера или специальная консоль фреймворка JavaScript?

Eric Schoonover 03.10.2008 00:27

Связанный пост - Chrome: console.info, console.debug не работают

RBT 31.05.2018 12:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
444
2
898 866
18
Перейти к ответу Данный вопрос помечен как решенный

Ответы 18

Ответ принят как подходящий

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

К сожалению, это вызовет ошибку в IE. Поэтому вы должны закомментировать его перед развертыванием или включить библиотеку, которая его перехватывает. getfirebug.com/lite.html

Shermozle 03.10.2008 07:31

@Dan: WebKit Web Inspector также поддерживает API консоли FireBug.

olliej 03.10.2008 07:45

почему это принятый ответ? он не спрашивал, как писать в консоль firebug, он спрашивал, как писать в консоль ошибок. не быть членом или чем-то еще, просто указывать на это.

matt lohkamp 03.10.2008 14:25

+1. И для пользы всех, кто сейчас задается этим вопросом, стоит отметить, что, поскольку на этот вопрос был дан ответ, все браузеры теперь реализовали объект консоли, поэтому console.info() и т. д. Должны работать во всех браузерах, включая IE. Однако во всех случаях вам необходимо, чтобы в это время было открыто окно отладчика, иначе вызовы console будут генерировать ошибки.

Spudley 10.02.2011 17:59

@andrewjackson Как отмечалось ранее, console.info отлично работает во всех современных браузерах, включая IE. Ваш код по-прежнему совершенно действителен и полезен, если вы намереваетесь поддерживать старые браузеры (и если вы работаете на общедоступном веб-сайте, вы, черт возьми, должны!), Однако моя критика заключается только в том, что ваш комментарий вводит в заблуждение / неточен.

BrainSlugs83 29.06.2012 08:42

console.debug (), с другой стороны, не существует в IE. Мы можем обойти это с помощью: if (! Console.debug) {console.debug = function (args) {console.info (args); }}

Rovanion 26.11.2012 14:12

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

Вау .. Firebug Lite потрясающий

Dexter 14.04.2010 23:32

Веб-инспектор WebKit также поддерживает консольный API Firebug's (лишь незначительное дополнение к Ответ Дэна).

Очень хороший WebKit поддерживает это. Так что тогда это довольно широко поддерживалось. Большой!

Albus Dumbledore 23.06.2012 22:03

Один хороший способ сделать это, который работает в разных браузерах, описан в Отладка JavaScript: выбросьте свои предупреждения!.

throw () - отличное предложение - это должен быть выбранный ответ.

matt lohkamp 03.10.2008 14:24

Да, это кроссбраузерность, и она выполняет свою работу. Повышен.

ArtBIT 25.10.2010 06:00

Согласен, это кроссбраузерный подход. Но .. Разве выдача исключения принципиально не отличается от регистрации сообщений?

Robin Maben 08.12.2010 09:59

Создание исключения не обязательно сработает, если есть попытка ... улова, которая завершает выброс. (Это может быть где угодно выше в динамическом стеке, не обязательно визуально, лексически оборачивая бросок.) Уловка может поглотить бросок и, возможно, сообщить что-то, а может и нет. Иногда библиотеки «услужливо» игнорируют ошибки в частях страницы, чтобы остальная часть страницы была обработана.

dlaliberte 28.01.2011 00:03

С другой стороны, выброс исключения остановит выполнение текущего «потока» (как отметил Ювал А) и возобновит его в catch, если он есть. Я сомневаюсь, что это то, что нужно

dlaliberte 28.01.2011 00:11

throw() определенно не подходит для этого. рано или поздно вы попадете в беду. для меня это было раньше :(

Hugo Mota 01.07.2011 00:06

@Ian_Oxley: в какой-то момент он был отключен, теперь он восстановлен, но размещение кода прямо здесь все еще лучше и рекомендуется лучшими практиками stackoverflow.

scrat.squirrel 19.03.2012 19:21

Исключения регистрируются в консоли JavaScript. Вы можете использовать это, если хотите, чтобы Firebug был отключен.

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

Использование:

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

В некоторых браузерах, если у вас включена отладка, будут появляться всплывающие сообщения.

BrainSlugs83 29.06.2012 08:44

Не могли бы вы объяснить, почему throw должен быть завернут в setTimeout?

Antony 26.05.2020 12:11

О причинах, по которым необходим setTimeout, см. Мой ответ. По сути, это выбросить ошибку в новом потоке.

dlaliberte 13.07.2020 18:25

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

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

Я предполагаю, что это потому, что вы не ответили на вопрос ОП. Для печати на JS-консоль вы должны использовать встроенный метод, такой как console.info(), throw() и т. д. Кроме того, нет ничего плохого в поведении throw(), как вы, кажется, подразумеваете - тот факт, что он останавливает выполнение, является преднамеренным и задокументированным. (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…‌), и это согласуется с тем, как исключения генерируются / перехватываются в других языках программирования. (Если вы хотите регистрировать содержимое переменной без остановки выполнения, для этого предназначен console.info().)

Sean the Bean 11.09.2015 22:41

@SeantheBean, изначально была дискуссия о том, что IE не поддерживает console.info, поэтому люди предлагали альтернативы. Что касается остановки выполнения throw(), конечно это намеренно, никто не сказал, что это не так. Вот почему обычно нет - хороший способ регистрировать отладочную информацию во время выполнения, чего хотел OP ...

Yuval A. 17.11.2015 18:17

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

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

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

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

Как всегда, Internet Explorer - это большой слон в роликах, который останавливает вас, просто используя console.info().

журнал 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.info(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, прежде чем перехватить исключение?

Danubian Sailor 14.11.2011 13:20

@lechlukasz Я думаю, вы можете сэкономить накладные расходы на расширение и просто использовать console.info плюс эту проверку IE: stackoverflow.com/questions/1215392/…

Chris S 14.11.2011 21:26

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

console.info("your message here");

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

Все современные браузеры поддерживают console.info().

JJJ 12.03.2012 14:33

Все современные браузеры СЕЙЧАС поддерживают console.info(). До недавнего времени это было неправдой.

Bryce 17.09.2013 01:02

console.error(message); // Outputs an error message to the Web Console
console.info(message); // Outputs a message to the Web Console
console.warn(message); // Outputs a warning message to the Web Console
console.info(message); // Outputs an informational message to the Web Console. In some browsers it shows a small "i" in front of the message.

Вы также можете добавить CSS:

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

Более подробную информацию можно найти здесь: https://developer.mozilla.org/en-US/docs/Web/API/console

Документация для Chrome: developers.google.com/chrome-developer-tools/docs/console

mrzmyr 13.08.2013 02:34

Это правильный ответ. Слово «ошибка» даже не упоминается в выбранном ответе, хотя оно есть в заголовке вопроса.

Ivan Durst 23.09.2015 20:43

Дополнительная информация о добавлении CSS - это довольно весело. +1!

sudo make install 24.01.2016 03:39

@ O.R.Mapper Что там не работает? Как я полагаю, CSS?

Nicholas 08.06.2017 15:09

@Nicholas: Я попробую еще раз позже, но, если я правильно помню, CSS дословно появился в сообщении журнала, что сделало вывод консоли более запутанным, чем более легким для чтения.

O. R. Mapper 08.06.2017 16:13

В тот момент, когда вы понимаете, что все эти годы использования console.info вы можете использовать css внутри консоли: |

Red 25.09.2017 17:54

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

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

alert("message");

Это ничего общего с тем, что спросил OP

undefined 27.08.2017 17:41

console.info("your message here");

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

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

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

Чтобы ответить на вопрос:

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

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

Ваш ответ кажется лучшим, но Страница Mozilla MDN говорит, что console.error(..) - нестандартная функция и не должна использоваться в производстве. Что вы думаете об этом? Есть ли у вас какие-либо предложения для начинающего программиста, использующего console.error против console.info?

modulitos 28.02.2015 00:27

Это интересно. Тогда мы не должны этим пользоваться. Спасибо за информацию, Лукас.

Yster 13.03.2015 18:18
MDN deems console.info(...) "non-standard" as well. In that regard, console.error is as stable as console.info.
Mike Rapadas 07.05.2015 17:29

@Lucas Какая разница, стандартная ли она? Кто будет использовать консольное ведение журнала для продакшена?

Andrew 02.05.2017 22:05

Console.error теперь работает во всех основных браузерах. Даже IE8. См. developer.mozilla.org/en-US/docs/Web/API/Console/error

Red 25.09.2017 18:01

Посетите https://developer.chrome.com/devtools/docs/console-api для получения полной справки по API консоли.

    console.error(object[Obj,....])\

В этом случае объектом будет ваша строка ошибки

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

console.warn("Text to print on console");

function foo() {
  function bar() {
    console.trace("Tracing is Done here");
  }
  bar();
}

foo();

console.info(console); //to print console object
console.clear('console.clear'); //to clear console
console.info('console.info'); //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.info("This is the outer level");
console.group();
console.info("Level 2");
console.group();
console.info("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.info("Back to level 2");
console.groupEnd();
console.info("Back to the outer level");

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

console.info(`x = ${x}`);

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

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

Другие вопросы по теме