Как я могу вывести сообщение на консоль ошибок, желательно с переменной?
Например, что-то вроде:
print('x=%d', x);
Связанный пост - Chrome: console.info, console.debug не работают



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Установите Firebug, а затем вы сможете использовать console.info(...), console.debug(...) и т. д. (Подробнее см. документация).
К сожалению, это вызовет ошибку в IE. Поэтому вы должны закомментировать его перед развертыванием или включить библиотеку, которая его перехватывает. getfirebug.com/lite.html
@Dan: WebKit Web Inspector также поддерживает API консоли FireBug.
почему это принятый ответ? он не спрашивал, как писать в консоль firebug, он спрашивал, как писать в консоль ошибок. не быть членом или чем-то еще, просто указывать на это.
+1. И для пользы всех, кто сейчас задается этим вопросом, стоит отметить, что, поскольку на этот вопрос был дан ответ, все браузеры теперь реализовали объект консоли, поэтому console.info() и т. д. Должны работать во всех браузерах, включая IE. Однако во всех случаях вам необходимо, чтобы в это время было открыто окно отладчика, иначе вызовы console будут генерировать ошибки.
@andrewjackson Как отмечалось ранее, console.info отлично работает во всех современных браузерах, включая IE. Ваш код по-прежнему совершенно действителен и полезен, если вы намереваетесь поддерживать старые браузеры (и если вы работаете на общедоступном веб-сайте, вы, черт возьми, должны!), Однако моя критика заключается только в том, что ваш комментарий вводит в заблуждение / неточен.
console.debug (), с другой стороны, не существует в IE. Мы можем обойти это с помощью: if (! Console.debug) {console.debug = function (args) {console.info (args); }}
Если вы используете Firebug и вам также необходимо поддерживать IE, Safari или Opera, Firebug Lite добавляет поддержку console.info () в эти браузеры.
Вау .. Firebug Lite потрясающий
Веб-инспектор WebKit также поддерживает консольный API Firebug's (лишь незначительное дополнение к Ответ Дэна).
Очень хороший WebKit поддерживает это. Так что тогда это довольно широко поддерживалось. Большой!
Один хороший способ сделать это, который работает в разных браузерах, описан в Отладка JavaScript: выбросьте свои предупреждения!.
throw () - отличное предложение - это должен быть выбранный ответ.
Да, это кроссбраузерность, и она выполняет свою работу. Повышен.
Согласен, это кроссбраузерный подход. Но .. Разве выдача исключения принципиально не отличается от регистрации сообщений?
Создание исключения не обязательно сработает, если есть попытка ... улова, которая завершает выброс. (Это может быть где угодно выше в динамическом стеке, не обязательно визуально, лексически оборачивая бросок.) Уловка может поглотить бросок и, возможно, сообщить что-то, а может и нет. Иногда библиотеки «услужливо» игнорируют ошибки в частях страницы, чтобы остальная часть страницы была обработана.
С другой стороны, выброс исключения остановит выполнение текущего «потока» (как отметил Ювал А) и возобновит его в catch, если он есть. Я сомневаюсь, что это то, что нужно
throw() определенно не подходит для этого. рано или поздно вы попадете в беду. для меня это было раньше :(
@Ian_Oxley: в какой-то момент он был отключен, теперь он восстановлен, но размещение кода прямо здесь все еще лучше и рекомендуется лучшими практиками stackoverflow.
Исключения регистрируются в консоли JavaScript. Вы можете использовать это, если хотите, чтобы Firebug был отключен.
function log(msg) {
setTimeout(function() {
throw new Error(msg);
}, 0);
}
Использование:
log('Hello World');
log('another message');
В некоторых браузерах, если у вас включена отладка, будут появляться всплывающие сообщения.
Не могли бы вы объяснить, почему throw должен быть завернут в setTimeout?
О причинах, по которым необходим setTimeout, см. Мой ответ. По сути, это выбросить ошибку в новом потоке.
Замечание по поводу 'throw ()', упомянутого выше. Кажется, что он полностью останавливает выполнение страницы (я проверял в IE8), поэтому он не очень полезен для ведения журнала «текущих процессов» (например, для отслеживания определенной переменной ...)
Мое предложение, возможно, состоит в том, чтобы добавить элемент текстовое поле где-нибудь в вашем документе и изменить (или добавить) его ценить (который изменит его текст) для регистрации информации, когда это необходимо ...
Я предполагаю, что это потому, что вы не ответили на вопрос ОП. Для печати на JS-консоль вы должны использовать встроенный метод, такой как console.info(), throw() и т. д. Кроме того, нет ничего плохого в поведении throw(), как вы, кажется, подразумеваете - тот факт, что он останавливает выполнение, является преднамеренным и задокументированным. (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…), и это согласуется с тем, как исключения генерируются / перехватываются в других языках программирования. (Если вы хотите регистрировать содержимое переменной без остановки выполнения, для этого предназначен console.info().)
@SeantheBean, изначально была дискуссия о том, что IE не поддерживает console.info, поэтому люди предлагали альтернативы. Что касается остановки выполнения throw(), конечно это намеренно, никто не сказал, что это не так. Вот почему обычно нет - хороший способ регистрировать отладочную информацию во время выполнения, чего хотел OP ...
Вот решение буквального вопроса о том, как вывести сообщение на консоль ошибок браузера, а не на консоль отладчика. (Могут быть веские причины для обхода отладчика.)
Как я отмечал в комментариях к предложению выдать ошибку, чтобы получить сообщение в консоли ошибок, одна проблема заключается в том, что это прервет поток выполнения. Если вы не хотите прерывать поток, вы можете выбросить ошибку в отдельном потоке, созданном с помощью 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, прежде чем перехватить исключение?
@lechlukasz Я думаю, вы можете сэкономить накладные расходы на расширение и просто использовать console.info плюс эту проверку IE: stackoverflow.com/questions/1215392/…
Если вы используете Сафари, вы можете написать
console.info("your message here");
и он появляется прямо на консоли браузера.
Все современные браузеры поддерживают console.info().
Все современные браузеры СЕЙЧАС поддерживают console.info(). До недавнего времени это было неправдой.
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
Это правильный ответ. Слово «ошибка» даже не упоминается в выбранном ответе, хотя оно есть в заголовке вопроса.
Дополнительная информация о добавлении CSS - это довольно весело. +1!
@ O.R.Mapper Что там не работает? Как я полагаю, CSS?
@Nicholas: Я попробую еще раз позже, но, если я правильно помню, CSS дословно появился в сообщении журнала, что сделало вывод консоли более запутанным, чем более легким для чтения.
В тот момент, когда вы понимаете, что все эти годы использования console.info вы можете использовать css внутри консоли: |
Это не выводится на консоль, но откроет вам всплывающее окно с вашим сообщением, которое может быть полезно для некоторой отладки:
просто сделать:
alert("message");
Это ничего общего с тем, что спросил OP
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?
Это интересно. Тогда мы не должны этим пользоваться. Спасибо за информацию, Лукас.
console.info(...) "non-standard" as well. In that regard, console.error is as stable as console.info.
@Lucas Какая разница, стандартная ли она? Кто будет использовать консольное ведение журнала для продакшена?
Console.error теперь работает во всех основных браузерах. Даже IE8. См. developer.mozilla.org/en-US/docs/Web/API/Console/error
Посетите 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 formateTo 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}`);
О какой консоли вы говорите. Консоль браузера или специальная консоль фреймворка JavaScript?