@farm.js /哨兵
为Farm.js应用程序提供错误报告和跟踪。它映射了Farm的请求、渲染和 在Sentry上构建生命周期,这样错误就会随着路由上下文到达,请求也会被跟踪。
看到 稳定性和支持 因为这个包裹保证了什么。
安装
pnpm add @farm.js/sentry @sentry/node
@sentry/node 是可选的对等依赖项。如果一个 dsn 已配置且未安装,
插件记录一个明显的错误,并继续不报告,而不是阻止错误
从申请开始。
配置
import { defineConfig } from "@farm.js/core";
import { sentryPlugin } from "@farm.js/sentry";
export default defineConfig({
plugins: [
sentryPlugin({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 0.1,
sourceMaps: true,
}),
],
});
初始化早期
Node SDK在其他模块加载时给它们打补丁,因此它必须在其他模块之前运行 应用程序。为此添加一个检测文件:
// src/instrumentation.ts
import { registerSentry } from "@farm.js/sentry";
export const register = registerSentry({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 0.1,
});
没有这个插件仍然报告错误,但SDK的自动数据库和HTTP 仪器将无法连接。
它是做什么的
| 钩 | 行为 |
|---|---|
runtime.start | 初始化SDK(如果还没有),并监听错误事件 |
runtime.context | 按路由模式命名请求范围 |
runtime.after | 设置响应的跨度状态 |
runtime.error | 用路由、类型和请求上下文捕获异常 |
runtime.close | 在关机时刷新挂起事件 |
build.configure | 以下情况下启用源映射 sourceMaps 设置 |
span是通过路由模式而不是路径名来命名的,所以 /users/[id] 保持一个span名
而不是每个用户一个。
哪里SDK自己的HTTP工具已经为请求打开了一个跨度,插件 重命名其中一个,而不是启动另一个,因此自动HTTP和数据库范围保持嵌套 根据要求。它只在没有活动时创建一个span。
Serverless
可以在没有关闭信号的情况下终止进程的主机永远不会运行 runtime.close,所以
挂起的事件丢失。而是在请求内部刷新:
sentryPlugin({
dsn: process.env.SENTRY_DSN,
flushOnResponse: true,
});
同花顺递给 waitUntil,因此主机将使调用保持活动状态,直到调用完成。
选项
| 选项 | 默认的 | 描述 |
|---|---|---|
dsn | 哨兵项目DSN。 | |
environment | 仪器模式 | 环境的名字。 |
release | 部署的发布标识符。 | |
tracesSampleRate | 被跟踪请求的比例。总是发送错误。 | |
sendDefaultPii | false | 包括请求头和用户数据。 |
enabled | true | 设置false注册钩子但不报告任何内容。 |
sdk | @sentry/node | 使用SDK模块,而不是导入它。 |
flushOnResponse | false | 在每次响应和请求失败后刷新。 |
flushTimeoutMs | 2000 | 刷新超时。 |
sourceMaps | false | 在生产构建中生成源映射。不上传,见下文。 |
sendDefaultPii 默认情况下关闭,因为错误事件可以携带请求标头和用户
数据。
源地图
sourceMaps: true 仅在生产构建期间生成源映射。它不上传
把它们传给哨兵,这样在地图被单独上传之前,生产堆栈的痕迹就会被最小化,
例如 sentry-cli. 尚未实现从构建中上传。
农场只有在源地图关闭时才会使用它的快速Oxc迷你车,这样它们才能移动 缩小到Nitro的简洁:
pnpm add -D @rollup/plugin-terser
如果没有它,生产构建就会失败 Cannot find module '@rollup/plugin-terser'.
运行时支持
节点预置。 @sentry/node 不运行在Cloudflare工人,需要什么 @sentry/cloudflare
相反,所以 registerSentry 不做手术吗 edge 和 bun 运行时。跟踪边缘支持
分开。
自带SDK
sdk 接受任何与插件使用的小结构接口相匹配的内容,这也是
如何对包进行单元测试:
import * as Sentry from "@sentry/node";
sentryPlugin({ sdk: Sentry });