ابرووا
شروع رایگان
☰ فهرست مستندات · لاگ در SDK نود

لاگ‌گیری با SDK Node.js

لاگ‌گیری سمت سرور برای Node.js با تلاش مجدد با فاصله‌ی افزایشی، بدون وابستگی و یکپارچگی با Express.js.

به‌روزرسانی: ۵ آبان ۱۴۰۵

لاگ‌گیری سمت سرور با تلاش مجدد با فاصله‌ی افزایشی (exponential backoff)، بدون هیچ وابستگی و با یکپارچگی Express.js. لاگ‌ها در ابرووا تریس › Logs نمایش داده می‌شوند و از AbrovaTrace.captureMessage() جدا هستند؛ آن متد به بخش Messages می‌رود.

تلاش مجدد با فاصله‌ی افزایشی

دسته‌ای که ارسالش ناموفق باشد بعد از ۲ ثانیه ← ۴ ثانیه ← ۸ ثانیه ← ... تا حداکثر ۶۰ ثانیه دوباره ارسال می‌شود. بعد از ۱۰ تلاش ناموفق، لاگ‌ها تا لاگ بعدی یا flush بعدی در بافر می‌مانند.

حداکثر اندازه‌ی بافر

پیش‌فرض ۱۰۰۰ لاگ. وقتی از این حد بگذرد، قدیمی‌ترین لاگ‌ها حذف می‌شوند تا حافظه پر نشود.

تایمر تنبل

تابع setTimeout فقط وقتی اجرا می‌شود که بافر لاگ داشته باشد. در حالت بیکار هیچ بار پردازشی ندارد.

بدون وابستگی

از ماژول‌های داخلی http/https خود Node.js استفاده می‌کند. هیچ پکیج خارجی لازم نیست.

نصب#

رجیستری ابرووا را به .npmrc اضافه کنید و سپس نصب کنید (نگاه کنید به SDK Node.js):

bash
# .npmrc
@abrova-trace:registry=https://center.abrova.ir/api/packages/abrova/npm/
bash
npm install @abrova-trace/nodejs-sdk

استفاده‌ی پایه#

javascript
const { LogService, LogLevel } = require('@abrova-trace/nodejs-sdk');

const logger = new LogService({
  apiKey: 'ab_live_your_api_key',
  sourceId: 'api-server',
  sourceName: 'My API Server',
  environment: 'production',
});

logger.log('Server started on port 3000', LogLevel.INFO);
logger.log('Database connection slow', LogLevel.WARN, { latency: 2500 });
logger.log('Failed to process payment', LogLevel.ERROR, { orderId: '12345' });

// Graceful shutdown
process.on('SIGTERM', async () => {
  await logger.dispose();
  process.exit(0);
});

اگر از قبل AbrovaTrace.init() را صدا می‌زنید، به‌جای ساختن یک LogService می‌توانید از همان برای لاگ‌گیری استفاده کنید. این روش کلید API، environment و release را از init() برمی‌دارد و کاربری را که با setUser() تنظیم کرده‌اید به لاگ‌ها پیوست می‌کند:

javascript
const AbrovaTrace = require('@abrova-trace/nodejs-sdk');

AbrovaTrace.enableLogging({ sourceId: 'api-server', sourceName: 'My API Server' }); // flushes every 5s by default

AbrovaTrace.info('Server started on port 3000');
AbrovaTrace.warn('Database connection slow', { latency: 2500 });
AbrovaTrace.logError('Failed to process payment', { orderId: '12345' });
// also: trace(), logDebug(), fatal(), log(message, level, metadata)

await AbrovaTrace.flushLogs();   // sends buffered logs now

پیش از بسته شدن پروسه، await AbrovaTrace.flush() را صدا بزنید. این متد لاگ‌های بافرشده را همراه با خطاها، پیام‌ها و spanهای عملکرد در انتظار می‌فرستد و اگر زمان انتظارش (پیش‌فرض: ۵۰۰۰ میلی‌ثانیه) زودتر تمام شود، مقدار false برمی‌گرداند. متد AbrovaTrace.close() هم لاگ‌های بافرشده را می‌فرستد و سپس SDK را ریست می‌کند.

سطح‌های لاگ#

javascript
const { LogLevel } = require('@abrova-trace/nodejs-sdk');

logger.log('Detailed trace info', LogLevel.TRACE);
logger.log('Debug information', LogLevel.DEBUG);
logger.log('User action completed', LogLevel.INFO);
logger.log('Approaching rate limit', LogLevel.WARN);
logger.log('Failed to save data', LogLevel.ERROR);
logger.log('App crashed unexpectedly', LogLevel.FATAL);

یکپارچگی با Express.js#

javascript
const express = require('express');
const { LogService, LogLevel } = require('@abrova-trace/nodejs-sdk');

const app = express();
const logger = new LogService({
apiKey: 'ab_live_your_api_key',
sourceId: 'express-api',
environment: process.env.NODE_ENV || 'development',
});

// Request logging middleware
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
  const duration = Date.now() - start;
  const level = res.statusCode >= 400 ? LogLevel.ERROR : LogLevel.INFO;
  logger.log(`${req.method} ${req.path} ${res.statusCode}`, level, {
    method: req.method,
    path: req.path,
    statusCode: res.statusCode,
    duration,
  });
});
next();
});

// Error logging middleware
app.use((err, req, res, next) => {
logger.log(err.message, LogLevel.ERROR, {
  stack: err.stack,
  path: req.path,
});
res.status(500).json({ error: 'Internal Server Error' });
});

متادیتا و اطلاعات کاربر#

javascript
// Structured metadata
logger.log('Order placed', LogLevel.INFO, {
  orderId: 'ORD-12345',
  amount: 4500000,
  currency: 'IRR',
});

// Associate logs with a user (4th parameter)
logger.log('Payment declined', LogLevel.ERROR, {
  reason: 'insufficient_funds',
}, 'user_abc123');

عملیات دستی#

javascript
// Force flush all buffered logs
await logger.flush();

// Check buffer status
console.log('Pending logs:', logger.bufferSize);

// Dispose when shutting down (flushes remaining logs)
await logger.dispose();

پیکربندی#

javascript
const logger = new LogService({
  apiKey: 'ab_live_your_api_key',       // Required
  serverSecret: process.env.ABROVA_SERVER_SECRET, // Optional: ab_srv_..., sent with every request
  sourceId: 'api-server',            // Needed for batch sending (without it, logs are sent one by one)
  sourceName: 'My API Server',       // Optional display name
  platform: 'nodejs',                // Default: 'nodejs'
  environment: 'production',         // 'development', 'staging', 'production'
  release: '1.2.3',                  // Optional app version
  batchSize: 50,                     // Flush when buffer reaches this size
  flushIntervalMs: 30000,            // Max time before flush (default: 30000)
  maxBufferSize: 1000,               // Drop oldest logs when exceeded
  debug: false,                      // Enable console debug output
});
گزینهنوعاجباریتوضیح
apiKeystringبلهکلید API پروژه‌ی شما
serverSecretstringخیرکلید سرور شما (ab_srv_xxx) که با هر درخواست لاگ فرستاده می‌شود؛ آن را فقط روی سرور نگه دارید
apiUrlstringخیرآدرس پایه‌ی API تریس؛ فقط برای API تریس خودمیزبان تنظیمش کنید (پیش‌فرض: "https://trace.abrova.ir")
sourceIdstringخیرشناسه‌ی منبع (مثلاً "api-server"). بدون آن، هر لاگ با یک درخواست جدا فرستاده می‌شود و ارسال‌های ناموفق دوباره امتحان نمی‌شوند
sourceNamestringخیرنام نمایشی خوانا برای این منبع
platformstringخیرشناسه‌ی پلتفرم (پیش‌فرض: "nodejs")
environmentstringخیرنام محیط (پیش‌فرض: "production")
releasestringخیرشناسه‌ی نسخه‌ی اپ
batchSizenumberخیروقتی بافر به این اندازه برسد flush می‌شود (پیش‌فرض: ۵۰)
flushIntervalMsnumberخیرحداکثر زمان تا flush به میلی‌ثانیه (پیش‌فرض: ۳۰۰۰۰)
maxBufferSizenumberخیربا گذشتن از این حد، قدیمی‌ترین لاگ‌ها حذف می‌شوند (پیش‌فرض: ۱۰۰۰)
debugbooleanخیرنمایش خروجی دیباگ در کنسول (پیش‌فرض: false)

توصیه‌ها#

از شناسه‌ی منبع استفاده کنید

برای sourceId مقدارهای معنادار بگذارید تا منبع لاگ‌ها در داشبورد مشخص باشد

خاموش شدن تمیز

همیشه روی SIGTERM/SIGINT متد dispose() را صدا بزنید تا لاگ‌های باقی‌مانده فرستاده شوند (اگر از طریق AbrovaTrace لاگ می‌گیرید، AbrovaTrace.flush() را)

middleware لاگ درخواست‌ها

middleware لاگ درخواست‌ها را در ابتدای pipeline اکسپرس اضافه کنید

middleware خطا در آخر

middleware لاگ خطا را بعد از همه‌ی routeها اضافه کنید تا همه‌چیز را پوشش دهد

متادیتای ساختاریافته

متادیتای ساختاریافته (شناسه‌ها، مدت‌زمان‌ها، مسیرها) بفرستید تا فیلتر کردن ساده‌تر شود

کاربر را مشخص کنید

شناسه‌ی کاربر را به لاگ‌ها بدهید تا دیباگ مشکلات مخصوص یک کاربر ساده‌تر شود

این صفحه مفید بود؟
گزارش مشکل