Я использую angular и хочу реализовать в своем приложении функцию отчета об ошибке. Для этого я хочу отправить содержимое консоли браузеров на отладку. Но как я могу до него дотянуться.

Не каждая ошибка генерируется вручную с помощью console.log (... чтобы я мог сохранить ее одновременно, некоторые ошибки генерируются из самого angular или генерируются Исключениями из httpservice.

Можно ли получить доступ к содержимому фронтальной консоли?

Спасибо.

0
xDrago 14 Сен 2020 в 18:14

2 ответа

Лучший ответ

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

1
ForestG 14 Сен 2020 в 15:21

Этот подход не зависит от какой-либо JS-инфраструктуры. Это ванильный javascript.

Что я могу понять из вашего вопроса, так это то, что вы хотите получить доступ к неперехваченным сообщениям error, отправленным в console, и вы также упомянули, что работаете над некоторой функцией отчетов об ошибках. Иногда вам может также потребоваться захватить console.log/warn/info, вы можете переопределить поведение, как показано ниже, чтобы захватывать ошибки / сообщения, потому что консоль обрабатывается браузером. Так что единственный способ добиться такого поведения - это переопределить.

Прикрепление фрагмента кода, чтобы вы могли собирать данные консоли браузера и обрабатывать ошибки

// Add this file to app.component maybe 

let logStatements = [];

(() => {
  window.addEventListener("error", ev => {
    reportError(ev);
  })
  // Capturing console logs
  var oldLog = console.log;
  console.log = function (message) {
    oldLog.apply(console, arguments);
    logStatements.push({
      type: "console.log",
      data: message,
    });
  };
})(logStatements);

console.log('hello');
console.log('world');

// Array of captured console.logs
console.info(logStatements)

// Here you can send this to any backend or something
function reportError(ev) {
  console.log(`${ev.message} was caught in ${ev.filename}`);
}

// logging 'user' variable which is not defined to check if it gets caught 
console.log(user);
1
Mohammad Basit 14 Сен 2020 в 16:02