Next.js SDK
ثبت خطا، تشخیص کرش، breadcrumbها و یکپارچگی با React برای اپهای Next.js با App Router یا Pages Router.
ثبت خودکار خطاهای مدیریتنشده، promise rejectionها و خطاهای React
تشخیص کرش و از کار افتادن تب مرورگر
ثبت کارهای کاربر و رویدادها برای فهمیدن زمینهی خطا
پشتیبانی خودکار از source map برای stack traceهای خوانا
ساختهشده برای App Router و Pages Router
error boundary، hookها و کامپوننتها
در مرورگر و Node.js (API routeها و server componentها) کار میکند
ثبت جابهجایی بین صفحهها، نشستهای کاربر و metadata دلخواه
نمونهبرداری، فیلتر و hookها
نصب#
پکیجها از Abrova Center میآیند. دو مرحله:
۱. مخزن ابرووا را اضافه کنید به فایل .npmrc در ریشهی پروژه (npm، yarn و pnpm همه آن را میخوانند):
# .npmrc @abrova-trace:registry=https://center.abrova.ir/api/packages/abrova/npm/
۲. پکیج را نصب کنید:
npm install @abrova-trace/nextjs-sdk # or yarn add @abrova-trace/nextjs-sdk # or pnpm add @abrova-trace/nextjs-sdk
شروع سریع#
App Router (Next.js 13+)
فایل app/providers.tsx را بسازید:
'use client';
import { useEffect } from 'react';
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';
import { useAbrovaTraceNavigation } from '@abrova-trace/nextjs-sdk/react';
export function Providers({ children }: { children: React.ReactNode }) {
useEffect(() => {
AbrovaTrace.init({
apiKey: 'ab_live_your_api_key',
environment: process.env.NODE_ENV,
release: process.env.NEXT_PUBLIC_APP_VERSION,
debug: process.env.NODE_ENV === 'development',
});
}, []);
// Track navigation
useAbrovaTraceNavigation();
return <>{children}</>;
}هوک useAbrovaTraceNavigation() از useSearchParams() استفاده میکند. اگر next build دربارهی نبودن Suspense boundary خطا داد، آن را بهجای اینجا از یک کامپوننت کوچک داخل <Suspense> صدا بزنید (NavigationTracker را در بخش «ثبت جابهجایی بین صفحهها» در پایین ببینید).
فایل app/layout.tsx را بهروز کنید:
import { Providers } from './providers';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}Pages Router (Next.js 12 و قبلتر)
فایل pages/_app.tsx را بهروز کنید:
import { useEffect } from 'react';
import type { AppProps } from 'next/app';
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';
import { useAbrovaTracePagesRouter } from '@abrova-trace/nextjs-sdk/react';
function MyApp({ Component, pageProps }: AppProps) {
useEffect(() => {
AbrovaTrace.init({
apiKey: 'ab_live_your_api_key',
environment: process.env.NODE_ENV,
release: process.env.NEXT_PUBLIC_APP_VERSION,
});
}, []);
// Track navigation
useAbrovaTracePagesRouter();
return <Component {...pageProps} />;
}
export default MyApp;Error Boundary#
کامپوننتها را داخل error boundary قرار دهید تا خطاهای React خودکار گرفته و گزارش شوند:
استفادهی پایه
import { ErrorBoundary } from '@abrova-trace/nextjs-sdk/react';
export default function Page() {
return (
<ErrorBoundary fallback={<div>Something went wrong!</div>}>
<YourComponent />
</ErrorBoundary>
);
}همراه با تابع reset
<ErrorBoundary
fallback={(error, errorInfo, resetError) => (
<div>
<h1>Error: {error.message}</h1>
<button onClick={resetError}>Try again</button>
</div>
)}
>
<YourComponent />
</ErrorBoundary>همراه با handler خطا
<ErrorBoundary
onError={(error, errorInfo) => {
console.log('Error occurred:', error);
// Custom error handling
}}
>
<YourComponent />
</ErrorBoundary>Fallback پیشفرض
بدون fallback، این boundary یک پنل داخلی نمایش میدهد: عنوان «Something went wrong»، یک پیام کوتاه و دکمهی Try again که boundary را reset میکند. از نسخهی 0.1.8، پیام خطا، stack trace و component stack دیگر در production نمایش داده نمیشوند: اینها فقط وقتی showErrorDetails برابر true باشد در یک بخش جمعشوندهی «Error details» نمایش داده میشوند، و مقدار پیشفرض آن process.env.NODE_ENV !== 'production' است (در development نمایش داده میشود و در buildهای production پنهان است). اگر fallback دلخواه بدهید، همانطور که نوشتهاید نمایش داده میشود و showErrorDetails روی آن اثری ندارد.
<ErrorBoundary
fallbackMessage="We could not load this section."
showErrorDetails={false}
>
<YourComponent />
</ErrorBoundary>Propها
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| children | ReactNode | بله | کامپوننتهایی که باید محافظت شوند |
| fallback | ReactNode | function | خیر | رابط کاربری دلخواه بعد از خطا: یک element، یا تابعی با ورودی (error, errorInfo, resetError) که یک element برمیگرداند. جایگزین fallback پیشفرض میشود |
| onError | function | خیر | بعد از گزارش خطا با (error, errorInfo) صدا زده میشود |
| showDefaultFallback | boolean | خیر | وقتی fallback داده نشده، fallback داخلی نمایش داده شود (پیشفرض: true). با false چیزی نمایش داده نمیشود |
| fallbackMessage | string | خیر | پیام fallback داخلی (پیشفرض: "An unexpected error occurred. Our team has been notified.") |
| showErrorDetails | boolean | خیر | نمایش پیام خطا و stack trace در fallback داخلی (پیشفرض: در development برابر true و در production برابر false) |
ثبت دستی خطا#
با hookها
import { useAbrovaTrace } from '@abrova-trace/nextjs-sdk/react';
function MyComponent() {
const { captureException, captureMessage, setUserId } = useAbrovaTrace();
const handleClick = async () => {
try {
await riskyOperation();
} catch (error) {
captureException(error as Error, 'Failed to complete operation', {
userId: user.id,
action: 'button_click',
});
}
};
return <button onClick={handleClick}>Click me</button>;
}استفادهی مستقیم از API
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';
// Capture exception
try {
throw new Error('Something broke');
} catch (error) {
AbrovaTrace.getInstance()?.captureException(error as Error, 'Custom context', {
userId: '123',
customData: 'value',
});
}
// Capture a message (level: 'debug' | 'info' | 'warning' | 'error')
AbrovaTrace.getInstance()?.captureMessage(
'User completed checkout',
'info',
{ orderId: '456' }
);پیامها در کنسول، در بخش ابرووا تریس › پیامها، همراه با سطح، پلتفرم، دادههای اضافه و breadcrumbها نمایش داده میشوند. پیامها هیچوقت مشکل (issue) نمیسازند. سطحها: 'debug'، 'info' (پیشفرض)، 'warning' و 'error'. پیامها را برای چیزهایی به کار ببرید که اپ عمداً گزارش میدهد («پرداخت شروع شد»، «همگامسازی تمام شد»)؛ برای دادههای عیبیابی پرحجم از لاگها استفاده کنید.
Breadcrumbها#
Breadcrumbها کارهای کاربر را ثبت میکنند و زمینهی خطاها را فراهم میکنند. جابهجایی بین صفحهها (بعد از استفاده از یکی از hookهای navigation) و فراخوانیهای console.error / console.warn خودکار ثبت میشوند.
Breadcrumbهای دستی
import { BreadcrumbService, BreadcrumbType } from '@abrova-trace/nextjs-sdk';
// Generic breadcrumb
BreadcrumbService.add('User action', BreadcrumbType.User, { button: 'submit' });
// Specific types
BreadcrumbService.addUser('Clicked checkout button');
BreadcrumbService.addHttp('POST', '/api/orders', 200);
BreadcrumbService.addState('Cart updated', { items: 3 });
BreadcrumbService.addNavigation('/cart', '/checkout');با hookها
import { useBreadcrumbs } from '@abrova-trace/nextjs-sdk/react';
function Component() {
const { addBreadcrumb, addHttp, addState } = useBreadcrumbs();
const handleSubmit = async (data) => {
addBreadcrumb('Form submitted', { formName: 'contact' });
const response = await fetch('/api/contact', {
method: 'POST',
body: JSON.stringify(data),
});
addHttp('POST', '/api/contact', response.status);
};
return <form onSubmit={handleSubmit}>...</form>;
}تشخیص کرش#
SDK با یک سیستم heartbeat مبتنی بر localStorage، کرش و از کار افتادن تب مرورگر را تشخیص میدهد.
- کرش تب — کرش تب مرورگر را تشخیص میدهد
- تب بدون پاسخ — تبهای هنگکرده را تشخیص میدهد
- بستن اجباری — حالتهای بستن اجباری را تشخیص میدهد
- گزارش پس از وقوع — گزارش در اجرای بعدی
چطور کار میکند
- اپ شروع میشود — یک نشانگر کرش در localStorage ساخته میشود
- heartbeat هر ۵ ثانیه اجرا میشود
- اپ بهطور عادی بسته میشود — نشانگر حذف میشود
- اپ کرش میکند — نشانگر باقی میماند
- نشست بعدی — کرش تشخیص داده و گزارش میشود
API Routeها و Server Componentها#
فراخوانی init() در Providers / _app.tsx فقط در مرورگر اجرا میشود، پس روی سرور تا وقتی SDK را آنجا هم راهاندازی نکنید، AbrovaTrace.getInstance() مقدار null برمیگرداند. یک helper کوچک سمت سرور بسازید (اگر نمونهای از قبل راهاندازی شده باشد، init() همان را برمیگرداند):
// lib/abrova-trace-server.ts
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';
export const trace =
AbrovaTrace.getInstance() ??
AbrovaTrace.init({
apiKey: process.env.ABROVA_TRACE_API_KEY!,
environment: process.env.NODE_ENV,
});API Routeها
// pages/api/example.ts
import type { NextApiRequest, NextApiResponse } from 'next';
import { trace } from '@/lib/abrova-trace-server';
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
try {
// Your API logic
} catch (error) {
trace.captureException(error as Error, 'API Error', {
endpoint: '/api/example',
method: req.method,
});
res.status(500).json({ error: 'Internal Server Error' });
}
}Server Componentها (App Router)
// app/page.tsx
import { trace } from '@/lib/abrova-trace-server';
export default async function Page() {
try {
const data = await fetchData();
return <div>{data}</div>;
} catch (error) {
trace.captureException(error as Error, 'Server Component Error');
return <div>Error loading data</div>;
}
}Source Mapها#
برای داشتن stack traceهای خوانا، source mapهای production را در next.config.js فعال کنید:
// next.config.js
module.exports = {
productionBrowserSourceMaps: true,
};بعد از build اپ، فایلهای .map را با CLI ابرووا تریس آپلود کنید و همان release را بدهید که به AbrovaTrace.init() میدهید:
npx @abrova-trace/cli sourcemaps upload .next/static --release 1.0.0 --project YOUR_PROJECT_ID --token ab_pat_xxx
گزینههای پیکربندی#
AbrovaTrace.init({
apiKey: 'ab_live_your_api_key', // Required
environment: 'production', // Default: 'production'
release: '1.0.0', // Optional
captureUncaughtErrors: true, // Default: true
enabled: true, // Default: true
debug: false, // Default: false
timeout: 10, // Default: 10 seconds
enableServerSide: true, // Default: true
enableClientSide: true, // Default: true
enableCrashDetection: true, // Default: true
maxBreadcrumbs: 20, // Default: 20
sampleRate: 1.0, // 0.0 to 1.0
tags: { team: 'frontend' }, // Custom tags
ignoreErrors: ['ResizeObserver loop limit exceeded'],
ignoreUrls: [/chrome-extension:\/\//], // matched against the stack trace
beforeSend: (error) => error, // Filter/modify errors
});| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| apiKey | string | بله | کلید API پروژه |
| environment | string | خیر | نام محیط (پیشفرض: "production") |
| release | string | خیر | شناسهی نسخهی اپ |
| captureUncaughtErrors | boolean | خیر | گرفتن خودکار خطاهای مدیریتنشده (پیشفرض: true) |
| enabled | boolean | خیر | فعال/غیرفعال کردن SDK (پیشفرض: true) |
| debug | boolean | خیر | فعال کردن لاگهای debug (پیشفرض: false) |
| timeout | number | خیر | مهلت درخواست HTTP بر حسب ثانیه (پیشفرض: 10) |
| enableServerSide | boolean | خیر | ثبت خودکار خطاهای مدیریتنشده و unhandled rejectionها روی سرور (پیشفرض: true) |
| enableClientSide | boolean | خیر | ثبت خودکار خطاهای مدیریتنشده و unhandled rejectionها در مرورگر (پیشفرض: true) |
| enableCrashDetection | boolean | خیر | فعال کردن تشخیص کرش (پیشفرض: true) |
| maxBreadcrumbs | number | خیر | حداکثر تعداد breadcrumbهای نگهداشتهشده (پیشفرض: 20) |
| sampleRate | number | خیر | نرخ نمونهبرداری خطاها و پیامها بین 0.0 تا 1.0 (پیشفرض: 1.0) |
| tags | object | خیر | تگهای دلخواه که به همهی خطاها اضافه میشوند |
| ignoreErrors | array | خیر | پیامهای خطایی که نادیده گرفته میشوند (رشته یا RegExp) |
| ignoreUrls | array | خیر | رشته یا RegExp که با stack trace خطا مقایسه میشود؛ در صورت تطابق، خطا کنار گذاشته میشود |
| beforeSend | function | خیر | hook برای تغییر یا فیلتر خطاها پیش از ارسال؛ با برگرداندن null یا false خطا کنار گذاشته میشود |
| apiUrl | string | خیر | آدرس پایهی Trace API (پیشفرض: "https://trace.abrova.ir"). فقط برای نسخهی self-hosted تنظیمش کنید |
شناسایی کاربر#
import { AbrovaTrace } from '@abrova-trace/nextjs-sdk';
// Set user ID after authentication
AbrovaTrace.getInstance()?.setUserId('user-123');
// Get user ID
const userId = AbrovaTrace.getInstance()?.getUserId();ثبت جابهجایی بین صفحهها#
App Router (Next.js 13+)
'use client';
import { useAbrovaTraceNavigation } from '@abrova-trace/nextjs-sdk/react';
export function NavigationTracker() {
useAbrovaTraceNavigation();
return null;
}Pages Router
import { useAbrovaTracePagesRouter } from '@abrova-trace/nextjs-sdk/react';
function MyApp({ Component, pageProps }) {
useAbrovaTracePagesRouter();
return <Component {...pageProps} />;
}ثبت دستی
import { RouterIntegration } from '@abrova-trace/nextjs-sdk';
RouterIntegration.setCurrentRoute('/custom-route');زمینه و تگها#
metadata ماندگار را به همهی خطاها و پیامها اضافه کنید. تگها برای فیلتر کردن بر اساس دستهاند؛ extraها دادهی غنیتری برای هر رویدادند. (لاگها، spanها و Web Vitals اینها را همراه ندارند.)
Extraهای سراسری
const sdk = AbrovaTrace.getInstance();
sdk?.setExtra('organizationId', 'org-123');
sdk?.setExtra('feature', 'checkout-v2');
sdk?.setExtras({
organizationId: 'org-123',
feature: 'checkout-v2',
experiment: 'new-flow',
});
const orgId = sdk?.getExtra('organizationId');
const allExtras = sdk?.getExtras();
sdk?.clearExtras();تگها
const sdk = AbrovaTrace.getInstance();
sdk?.setTag('team', 'payments');
sdk?.setTag('region', 'us-east');
sdk?.setTags({ team: 'payments', version: '2.1' });
const team = sdk?.getTag('team');
const allTags = sdk?.getTags();
sdk?.clearTags();شناسهی نشست
هنگام راهاندازی SDK یک شناسهی نشست یکتا خودکار ساخته میشود (۱۶ بایت تصادفی hex) و به همهی خطاها و پیامها اضافه میشود تا در کنسول ابرووا بر اساس نشست گروهبندی شوند:
const sessionId = AbrovaTrace.getInstance()?.getSessionId();
Web Vitals#
Core Web Vitals را با کتابخانهی رسمی گوگل، web-vitals، اندازه بگیرید (فقط در مرورگر). این معیارها در کنسول ابرووا، در بخش ابرووا تریس › عملکرد، کنار spanهای HTTP نمایش داده میشوند.
const sdk = AbrovaTrace.getInstance();
sdk?.enableWebVitals({
reportAllChanges: false, // Only report final values (default)
batchInterval: 5000, // Send 5 s after the last metric (default); also sent when the page is hidden
});معیارهای اندازهگیریشده:
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| LCP | - | - | Largest Contentful Paint |
| CLS | - | - | Cumulative Layout Shift |
| INP | - | - | Interaction to Next Paint |
| TTFB | - | - | Time to First Byte |
| FCP | - | - | First Contentful Paint |
رویدادهای Web Vitals خودکار نوع دستگاه (mobile/tablet/desktop)، نوع اتصال، آدرس صفحه و اطلاعات route را همراه دارند.
TypeScript#
این SDK با TypeScript نوشته شده و تعریف کامل typeها را همراه دارد. وقتی برای اشیای پیکربندی یا payload رویدادها annotation صریح لازم دارید، typeها را import کنید:
import type {
AbrovaTraceConfig,
AbrovaTraceError,
Breadcrumb,
} from '@abrova-trace/nextjs-sdk';
import type {
PerformanceSpan,
WebVitalsData,
LogEntry,
LogLevel,
LogServiceConfig,
} from '@abrova-trace/nextjs-sdk';لاگ#
لاگ ساختیافتهی سمت سرور که در App Router، Pages Router و API Routeها کار میکند. لاگ از یک نمونهی جداگانهی LogService استفاده میکند — آن را در lib/logger.ts بسازید و از هر جا import کنید:
import { LogService } from '@abrova-trace/nextjs-sdk';
export const logger = new LogService({
apiKey: process.env.ABROVA_TRACE_API_KEY!,
sourceId: 'nextjs-app',
platform: 'nextjs',
environment: process.env.NODE_ENV,
});
logger.log('Users fetched', 'info', { count: 42 });میتوانید از طریق نمونهی SDK هم لاگ بفرستید که از پیکربندی init() استفاده میکند: AbrovaTrace.getInstance()?.info('Users fetched', { count: 42 }) (جدول «لاگ» را در «مرجع API» پایین ببینید). لاگها از captureMessage() جدا هستند: بهصورت دستهای ارسال میشوند و در بخش ابرووا تریس › لاگها نمایش داده میشوند.
برای جزئیات کامل — App Router، Pages Router، API Routeها، سطحهای لاگ و middleware درخواست — صفحهی لاگ در Next.js SDK را ببینید.
مرجع API#
AbrovaTrace — راهاندازی و چرخهی حیات
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| init(config) | - | - | راهاندازی SDK |
| getInstance() | - | - | گرفتن نمونهی singleton از SDK |
| close() | - | - | پاکسازی SDK و ارسال دادههای در صف |
ثبت خطا
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| captureException(error, message?, extra?, level?, callback?) | - | - | ثبت یک خطا / exception |
| captureMessage(message, level?, extra?, callback?) | - | - | ارسال پیام به ابرووا تریس › پیامها (مشکل ساخته نمیشود) |
کاربر و نشست
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| setUserId(userId) | - | - | تعیین شناسهی کاربر فعلی |
| getUserId() | - | - | گرفتن شناسهی کاربر فعلی |
| getSessionId() | - | - | گرفتن شناسهی نشستی که خودکار ساخته شده |
زمینهی سراسری (extraها)
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| setExtra(key, value) | - | - | تعیین یک extra |
| setExtras(extras) | - | - | تعیین چند extra بهطور همزمان |
| getExtra(key) | - | - | گرفتن مقدار یک extra |
| getExtras() | - | - | گرفتن همهی extraها |
| clearExtras() | - | - | پاک کردن همهی extraها |
تگها
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| setTag(key, value) | - | - | تعیین یک تگ |
| setTags(tags) | - | - | تعیین چند تگ بهطور همزمان |
| getTag(key) | - | - | گرفتن مقدار یک تگ |
| getTags() | - | - | گرفتن همهی تگها |
| clearTags() | - | - | پاک کردن همهی تگها |
پایش عملکرد
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| enablePerformanceTracking(options?) | - | - | روشن کردن گزارش عملکرد؛ در مرورگر همهی فراخوانیهای fetch را هم اندازه میگیرد. گزینهها: batchSize (پیشفرض: 5) و flushInterval بر حسب میلیثانیه (پیشفرض: 5000) |
| enableWebVitals(options?) | - | - | روشن کردن اندازهگیری Web Vitals |
| reportPerformanceSpan(span) | - | - | گزارش یک span |
| reportPerformanceSpanBatch(spans) | - | - | گزارش چند span بهطور همزمان |
| trackOperation(operation, fn, options?) | - | - | اندازهگیری زمان و گزارش یک عملیات async |
| createPerformanceFetch() | - | - | ساخت یک wrapper برای fetch که برای هر درخواست یک span گزارش میدهد. فقط بعد از فراخوانی enablePerformanceTracking()، trackOperation() یا reportPerformanceSpan() گزارش میدهد |
| flushPerformance() | - | - | ارسال فوری دادههای عملکرد بافرشده |
لاگ
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| enableLogging(options?) | - | - | روشن کردن مسیر ارسال لاگ |
| log(message, level?, metadata?) | - | - | لاگ با سطح مشخص |
| trace(message, metadata?) | - | - | لاگ در سطح trace |
| logDebug(message, metadata?) | - | - | لاگ در سطح debug |
| info(message, metadata?) | - | - | لاگ در سطح info |
| warn(message, metadata?) | - | - | لاگ در سطح warn |
| logError(message, metadata?) | - | - | لاگ در سطح error |
| fatal(message, metadata?) | - | - | لاگ در سطح fatal |
| flushLogs() | - | - | ارسال فوری لاگهای بافرشده |
| pendingLogCount | - | - | تعداد لاگهایی که هنوز در بافر هستند |
BreadcrumbService
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| add(message, type, data?, level?) | - | - | افزودن یک breadcrumb عمومی |
| addNavigation(from, to, data?) | - | - | افزودن breadcrumb جابهجایی بین صفحهها |
| addUser(action, data?) | - | - | افزودن breadcrumb کار کاربر |
| addHttp(method, url, status?, data?) | - | - | افزودن breadcrumb HTTP |
| addState(message, data?) | - | - | افزودن breadcrumb تغییر state |
| getAll() | - | - | گرفتن همهی breadcrumbها |
| clear() | - | - | پاک کردن همهی breadcrumbها |
RouterIntegration
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| trackAppRouterNavigation(pathname, searchParams?) | - | - | ثبت دستی جابهجایی در App Router |
| initializePagesRouter(router) | - | - | راهاندازی ثبت جابهجایی در Pages Router |
| setCurrentRoute(route) | - | - | جایگزین کردن route فعلی |
| getCurrentRoute() | - | - | گرفتن route فعلی |
| getNavigationContext() | - | - | گرفتن زمینهی فعلی navigation |
CrashDetector
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| enable() | - | - | روشن کردن تشخیص کرش |
| disable() | - | - | خاموش کردن تشخیص کرش |
| didCrashLastSession() | - | - | اگر نشست قبلی با کرش تمام شده باشد true برمیگرداند |
| getCrashReport() | - | - | گرفتن جزئیات کرش قبلی |
هوکهای React
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| useAbrovaTrace() | - | - | برمیگرداند: { captureException, captureMessage, setUserId, setExtra, setExtras, setTag, setTags } |
| useAbrovaTraceNavigation() | - | - | ثبت خودکار جابهجایی در App Router |
| useAbrovaTracePagesRouter() | - | - | ثبت خودکار جابهجایی در Pages Router |
| useBreadcrumbs() | - | - | برمیگرداند: { addBreadcrumb, addNavigation, addHttp, addState } |
کامپوننتهای React
| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| ErrorBoundary | - | - | error boundary برای React با گزارش خودکار خطا (نام دیگر: AbrovaTraceErrorBoundary) |
توصیهها#
ابرووا تریس را تا جای ممکن زود در چرخهی حیات اپ راهاندازی کنید تا همهی خطاها گرفته شوند
بعد از احراز هویت، شناسهی کاربر را تنظیم کنید تا خطاها به کاربران نسبت داده شوند
بخشهای اصلی اپ را داخل error boundary قرار دهید تا خطاهای React خودکار ثبت شوند
هنگام ثبت خطا، شناسهی کاربر، مبالغ و دادههای مرتبط را همراهش بفرستید
برای کارهای مهم کاربر breadcrumb اضافه کنید تا زمینهی خطا روشن باشد
برای production و development پیکربندی جدا داشته باشید (حالت debug، نرخ نمونهبرداری)
برای عملکرد درست تشخیص کرش، هنگام پاکسازی AbrovaTrace.getInstance()?.close() را صدا بزنید