【前端】企业级前端调试体系设计(含日志埋点 + Eruda 动态注入 + Sentry)

下面是一套可落地的"企业级前端调试体系设计",适配技术栈(React + Vite + 管理后台 / H5 / WebView)来设计,包含:

日志埋点(可观测性基础)

Eruda 动态注入(线上临时调试)

Sentry(错误监控与追踪)


一、整体架构(核心思路)


二、分层设计

第一层:本地调试(开发阶段)

工具:

  • Chrome DevTools

  • vConsole

  • Eruda

目标:快速开发 + 本地排错


第二层:运行时调试(真机 / 测试环境)

能力:

  • 动态开启 Eruda

  • 打印关键日志

  • 查看接口请求


第三层:线上监控(生产环境)

核心工具:

  • Sentry

目标:

  • 自动捕获错误

  • 还原用户行为

  • 快速定位问题


三、日志体系设计(核心基础)

1.日志分级(必须有)

javascript 复制代码
export enum LogLevel {
  DEBUG = "debug",
  INFO = "info",
  WARN = "warn",
  ERROR = "error",
}

2.封装 Logger(统一出口)

javascript 复制代码
class Logger {
  static debug(...args: any[]) {
    if (import.meta.env.DEV) {
      console.log("[DEBUG]", ...args);
    }
  }

  static info(...args: any[]) {
    console.info("[INFO]", ...args);
  }

  static warn(...args: any[]) {
    console.warn("[WARN]", ...args);
  }

  static error(...args: any[]) {
    console.error("[ERROR]", ...args);

    // 上报 Sentry
    Sentry.captureException(args);
  }
}

3.自动注入上下文(非常关键)

javascript 复制代码
function withContext(data: any) {
  return {
    ...data,
    userId: getUserId(),
    orgId: getOrgId(),
    url: location.href,
    ua: navigator.userAgent,
    time: Date.now(),
  };
}

解决问题:
"报错了,但不知道是谁、在哪、怎么触发的"


四、Sentry 集成(核心能力)

初始化

javascript 复制代码
import * as Sentry from "@sentry/react";

Sentry.init({
  dsn: "YOUR_DSN",
  integrations: [],
  tracesSampleRate: 1.0,
});

2.捕获错误

javascript 复制代码
try {
  throw new Error("test error");
} catch (e) {
  Sentry.captureException(e);
}

3.React 错误边界

javascript 复制代码
import { ErrorBoundary } from "@sentry/react";

<ErrorBoundary fallback={<div>Something went wrong</div>}>
  <App />
</ErrorBoundary>

4.用户行为追踪(重点)

javascript 复制代码
Sentry.addBreadcrumb({
  category: "click",
  message: "点击提交按钮",
  level: "info",
});

可以还原用户操作路径


五、Eruda 动态注入(实战重点)

错误做法

javascript 复制代码
import "eruda";
eruda.init();

会污染生产环境


正确做法(动态开启)

方式一:URL 控制

javascript 复制代码
if (location.search.includes("debug=true")) {
  import("eruda").then((eruda) => eruda.default.init());
}

方式二:localStorage 开关(推荐)

javascript 复制代码
if (localStorage.getItem("DEBUG") === "true") {
  import("eruda").then((eruda) => eruda.default.init());
}

方式三:远程开关(企业级)

javascript 复制代码
fetch("/api/debug-config").then(res => res.json()).then(config => {
  if (config.enableEruda) {
    import("eruda").then(e => e.default.init());
  }
});

可以远程给某个用户打开调试


六、请求层监控(非常重要)

Axios 拦截器

javascript 复制代码
axios.interceptors.request.use((config) => {
  Logger.info("Request:", config);
  return config;
});

axios.interceptors.response.use(
  (res) => {
    Logger.info("Response:", res);
    return res;
  },
  (err) => {
    Logger.error("API Error:", err);
    return Promise.reject(err);
  }
);

七、性能监控(进阶)

Sentry 支持:

javascript 复制代码
Sentry.init({
  tracesSampleRate: 1.0,
});

可监控:

  • 页面加载时间

  • API 耗时

  • 慢页面


八、企业级最佳实践(重点总结)

1. 三开关机制(必须有)

javascript 复制代码
{
  enableLog: true,
  enableEruda: false,
  enableSentry: true,
}

2. 不同环境策略

环境 策略
dev 全开
test 日志 + Eruda
prod Sentry + 可控 Eruda

3. 敏感信息过滤

javascript 复制代码
function sanitize(data: any) {
  delete data.password;
  delete data.token;
  return data;
}

4. 日志不要滥用

错误:

javascript 复制代码
console.log("进入页面");

正确:

javascript 复制代码
Logger.info("User enter dashboard", { userId });

九、一句话架构总结

Logger 负责记录 → Eruda 负责查看 → Sentry 负责监控

相关推荐
IT_陈寒7 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙7 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
CopyCode7 小时前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构
去伪存真7 小时前
Electron 自动化发布指南:GitHub Actions 跨平台打包全纪录
前端·electron
计算机魔术师7 小时前
OpenAI智能体失控闯进美国政府网站,53张用户图片外泄背后
前端
颜进强7 小时前
14 · NestJS ExecutionContext 执行上下文:守卫、拦截器、过滤器拿到的"同一个 context",为什么能力不一样?
前端·后端·ai编程
程序员Flycan7 小时前
🚀 跨域终结者:前端代理服务器(Proxy)原理解析与配置总结
前端
怕浪猫7 小时前
顶级模型一句话,AI 写出了能玩的 QQ飞车
前端·面试·github
huakoh7 小时前
MCP 报错分不清?先看响应里是 result 还是 error
前端
呃呃呃呃ex7 小时前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript