在混沌宇宙中捕捉错误的光——Next.js 全栈 Sentry / LogRocket

当一位开发者将 Next.js 搭起来,前后端一体,仿佛双剑合璧;当 Bugs 潜藏于页面,仿佛量子涨落中的暗能量。我们需要一双眼,不仅能看前端用户的点击、怒吼和错愕,还能窥见后端的报错、追踪和堆栈。于是,Sentry 和 LogRocket 登场了。

它们就像科幻小说中的两位角色:

  • Sentry:手握望远镜的侦察兵,精准捕捉错误与堆栈轨迹。
  • LogRocket:一位带录像机的时间旅行者,把用户亲手点过的按钮、划过的屏幕全都录进时光胶片。

我们把这些装备装进 Next.js 的盔甲,结果就是:不仅能知道错误在哪,还能知道用户是怎么走进那个坑的


一、前置准备:不要赤手上阵

在征程开始前,请确认:

  1. 你有一个 Next.js 项目(如果没有,终端里敲下 npx create-next-app@latest my-app)。

  2. 注册账号:

拿到两个"神器"的 DSN(通常是一段 URL 形式的秘钥地址)。


二、后端的眼睛 ------ 将 Sentry 注入 API 层

Sentry 在 Next.js 中往往需要分两块接入:服务端客户端

服务器上的错误(比如数据库没连上,JWT 解码失败),需要靠它来保存将错就错的真相。

sentry.server.config.js 文件里写下:

csharp 复制代码
// sentry.server.config.js
import * as Sentry from "@sentry/nextjs";

Sentry.init({
  dsn: process.env.SENTRY_DSN, // 来自 Sentry 后台的 DSN
  tracesSampleRate: 1.0,       // 采样率,建议开发环境调低
});

再来一个小例子,比如我们的 API:

javascript 复制代码
// pages/api/hello.js
export default function handler(req, res) {
  try {
    throw new Error("世界说:Hello Bug!");
  } catch (err) {
    // 把错误丢给 Sentry 收集
    console.error("捕获到错误:", err.message);
    const Sentry = require("@sentry/nextjs");
    Sentry.captureException(err);

    res.status(500).json({ error: "发生了一点点小意外" });
  }
};

当你访问 /api/hello,后台的错误将出现在 Sentry 控制台。仿佛给服务器配了"黑匣子"。


三、前端的记忆 ------ Sentry 与 LogRocket 的双剑合璧

客户端的接入在 sentry.client.config.js

javascript 复制代码
// sentry.client.config.js
import * as Sentry from "@sentry/nextjs";
import LogRocket from "logrocket";

Sentry.init({
  dsn: process.env.SENTRY_DSN,
  tracesSampleRate: 1.0,
  integrations: [
    new Sentry.Integrations.Breadcrumbs({ console: true }),
  ],
});

LogRocket.init("你的-logrocket-项目ID/应用名");

// 让 LogRocket 的 session ID 和 Sentry 错误互相连接起来
LogRocket.getSessionURL((sessionURL) => {
  Sentry.configureScope((scope) => {
    scope.setExtra("logrocketSessionURL", sessionURL);
  });
});

这样一来:

  • 如果用户点了一个永远卡死的按钮,Sentry 会告诉你错误堆栈位置;
  • 而 LogRocket 会让你"回看录像",看到用户点按钮之前是否疯狂刷新了十几次,还是在低网速下无情挣扎。

四、文学化的调试逻辑

编程调试有时就像侦探小说:现场残留的线索、倒下的咖啡杯、封存的指纹。

如果只有 Sentry,就像读到了一份血淋淋的案发报告,却不知嫌疑人如何潜入。

如果只有 LogRocket,就像看了一部默片,却听不到剧情里的对白。

把它们结合在一起,就是既有文字,又有画面------仿佛在一场交响乐里,既能听到阴沉的大提琴,也能看到指挥家的手势。


五、一些底层的原理碎片

  1. 堆栈收集(Stack Trace)
    JavaScript 的运行时会记录调用栈,当错误对象被抛出时,Sentry 将它序列化,上传到远程服务。
    这就像是程序员的"黑箱数据",告诉你飞机在失事前执行了哪些函数。
  2. 事件回放(Session Replay)
    LogRocket 并非真的录像,而是记录了用户交互事件(按钮点击、输入框变化、DOM 更新),然后在不同客户端用虚拟 DOM 技术重放。
    就像漫画分镜头,而不是实拍影像。
  3. 性能追踪(Tracing)
    Sentry 内部利用浏览器 Performance API 以及 Node.js 的事件循环监控,记录请求的时延。这类似于管弦乐里记录某一声小号延迟了半拍。

这些原理串联起来,使得错误追踪不再是盲目的漆黑,而是有温度、有维度的全景图


六、最终的诗意收尾

在 Next.js 的星空下,用户点下按钮是偶然,Bug 却可能是必然。

Sentry 是那位冷静的档案员,写满每次事故的细节;

LogRocket 则像一台时光机,把错误前的每一步都还原。

作为开发者,我们不再是茫然的摆渡人,而是历史的目击者。

所以,别害怕 Bug,它们是程序世界的诗意裂缝。

而我们,只需把望远镜和录像机调好,便能在混沌中笑看光流。

相关推荐
Mintopia2 小时前
长文本 AIGC:Web 端大篇幅内容生成的技术优化策略
前端·javascript·aigc
VueVirtuoso2 小时前
SaaS 建站从 0 到 1 教程:Vue 动态域名 + 后端子域名管理 + Nginx 配置
前端·vue.js·nginx
少年阿闯~~2 小时前
transition(过渡)和animation(动画)——CSS
前端·css·动画·过渡
Async Cipher2 小时前
CSS 继承 (Inheritance)
前端·css
祈祷苍天赐我java之术2 小时前
Vue 整体框架全面解析
前端·javascript·vue.js
洛小豆3 小时前
Git 打标签完全指南:从本地创建到远端推送
前端·git·github
世间小小鱼3 小时前
【爬坑指南】亚马逊文件中心 AWS S3 预签名URL 前端直传
前端·云计算·aws
华仔啊3 小时前
前端登录token到底应该存在哪?LocalStorage、SessionStorage还是Cookie?一篇说透!
前端·javascript
BeefyBytes3 小时前
动态组件库建设
前端