Skip to content

前端怎么做错误监控?

Posted on:2024年8月14日 at 19:41

前端错误监控是确保应用稳定性和用户体验的重要手段。以下是一些常见的前端错误监控方法:

1. 捕获 JavaScript 错误

方法

示例代码

// 捕获 JavaScript 错误
window.onerror = function (message, source, lineno, colno, error) {
  console.log("Error captured:", { message, source, lineno, colno, error });
  // 发送错误信息到服务器
  sendErrorToServer({ message, source, lineno, colno, error });
  return true; // 防止浏览器默认处理
};

// 捕获未处理的 Promise 拒绝
window.addEventListener("unhandledrejection", function (event) {
  console.log("Unhandled rejection:", event.reason);
  // 发送错误信息到服务器
  sendErrorToServer({ reason: event.reason });
});

// 发送错误信息到服务器
function sendErrorToServer(error) {
  fetch("/log-error", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(error),
  });
}

2. 使用监控工具

集成专业的前端错误监控工具可以提供更多功能,如自动错误捕获、用户上下文、异常堆栈跟踪等。

常用工具

示例代码(以 Sentry 为例)

<script src="https://browser.sentry-cdn.com/7.7.0/bundle.tracking.min.js"></script>
<script>
  Sentry.init({ dsn: "https://your-dsn@sentry.io/your-project-id" });

  // 捕获 JavaScript 错误
  try {
    // 可能抛出错误的代码
  } catch (error) {
    Sentry.captureException(error);
  }

  // 捕获 Promise 拒绝
  window.addEventListener("unhandledrejection", (event) => {
    Sentry.captureException(event.reason);
  });
</script>

3. 监控 AJAX 请求错误

方法

示例代码

// XMLHttpRequest
const originalOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
  this.addEventListener("error", function () {
    console.log("XHR error:", url);
    // 发送错误信息到服务器
    sendErrorToServer({ type: "XHR", url, status: this.status });
  });
  return originalOpen.apply(this, arguments);
};

// Fetch API
const originalFetch = window.fetch;
window.fetch = function (url, options) {
  return originalFetch(url, options).catch((error) => {
    console.log("Fetch error:", url, error);
    // 发送错误信息到服务器
    sendErrorToServer({ type: "Fetch", url, error });
    throw error; // 继续抛出错误
  });
};

4. 记录用户行为和上下文

方法

示例代码

// 示例:记录用户行为
document.addEventListener("click", function (event) {
  console.log("User clicked:", event.target);
  // 发送行为数据到服务器
  sendUserActionToServer({ type: "click", target: event.target.tagName });
});
原文转自:https://fe.ecool.fun/topic/fac9701b-e86e-499a-b1eb-8ba6a79dd146