پرش به مطلب اصلی

لاگ‌ها

🖼
تصویر: نمایش لاگ‌های زنده اپلیکیشنplaceholder — تصویر را اینجا جایگزین کنید

ابرکلیک دو نوع لاگ برای هر اپلیکیشن فراهم می‌کند: لاگ‌های بیلد که در زمان دیپلوی تولید می‌شوند، و لاگ‌های ران‌تایم که خروجی اپلیکیشن در حال اجرا را نشان می‌دهند.


لاگ‌های بیلد

هر بار که دستور abrclick deploy اجرا می‌کنید، ابرکلیک کد شما را در یک پاد BuildKit می‌سازد. لاگ‌های این فرآیند به صورت زنده (live) از طریق SSE استریم می‌شوند.

مشاهده در CLI

به صورت پیش‌فرض، دستور deploy لاگ‌های بیلد را تا پایان فرآیند نمایش می‌دهد:

abrclick deploy

اگر می‌خواهید بدون منتظر ماندن برای پایان بیلد برگردید، از --no-follow استفاده کنید و بعداً لاگ‌ها را بخوانید:

abrclick deploy --no-follow

# لاگ‌های یک دیپلوی مشخص را ببینید
abrclick apps logs myapp --deployment dep_abc123

مشاهده در داشبورد

در صفحه جزئیات اپلیکیشن، تب Deployments را باز کنید. روی هر آیتم کلیک کنید تا لاگ‌های کامل آن بیلد نمایش داده شود.


لاگ‌های ران‌تایم

لاگ‌های ران‌تایم شامل هر چیزی است که اپلیکیشن شما به stdout یا stderr می‌نویسد.

CLI

# لاگ‌های اپ لینک‌شده در پوشه جاری
abrclick apps logs

# لاگ‌های یک اپ مشخص
abrclick apps logs myapp-id

# روش جایگزین
abrclick logs --app myapp-id

به صورت پیش‌فرض لاگ‌ها به صورت زنده دنبال می‌شوند. برای خروج Ctrl+C بزنید.

داشبورد

در صفحه جزئیات اپلیکیشن، تب Logs را باز کنید. لاگ‌ها به صورت real-time به‌روز می‌شوند.


نگه‌داری لاگ‌ها بر اساس پلن

مدت نگه‌داری لاگ‌های ران‌تایم به پلن شما بستگی دارد:

پلنمدت نگه‌داری
ابر (رایگان)۱ ساعت
باران۲۴ ساعت
برف۷ روز
رعد۳۰ روز
طوفان۹۰ روز
سازمانیسفارشی
اطلاع

لاگ‌های بیلد به صورت جداگانه و به ازای هر دیپلوی ذخیره می‌شوند و تابع محدودیت زمانی پلن نیستند.


جستجو در لاگ‌ها

جستجوی متنی در لاگ‌ها از پلن رعد به بالا در داشبورد در دسترس است. می‌توانید بر اساس متن آزاد، بازه زمانی، و سطح لاگ (در صورت استفاده از JSON) فیلتر کنید.

نکته

اگر روی پلن رایگان یا باران هستید و به جستجو نیاز دارید، می‌توانید لاگ‌ها را از CLI با grep فیلتر کنید:

abrclick apps logs myapp | grep "ERROR"

لاگ‌گذاری ساختاریافته (JSON)

اگر اپلیکیشن شما لاگ‌ها را به فرمت JSON چاپ کند، می‌توانید لاگ‌های JSON را ساختارمند مشاهده کنید و فیلدها در داشبورد خواناتر نمایش داده می‌شوند.

مثال خروجی JSON که داشبورد آن را تشخیص می‌دهد:

{"level":"info","message":"درخواست دریافت شد","method":"GET","path":"/api/users","latency_ms":12}
{"level":"error","message":"اتصال به دیتابیس ناموفق بود","error":"connection refused"}

نمونه در Node.js با pino

const pino = require('pino');
const logger = pino(); // به صورت پیش‌فرض JSON چاپ می‌کند

logger.info({ method: 'GET', path: '/api/users' }, 'درخواست دریافت شد');
logger.error({ err: error }, 'خطا در پردازش');

نمونه در Python با structlog

import structlog

log = structlog.get_logger()
log.info("درخواست دریافت شد", method="GET", path="/api/users")
log.error("خطا رخ داد", error=str(e))

نمونه در Go با zap

import "go.uber.org/zap"

logger, _ := zap.NewProduction()
logger.Info("درخواست دریافت شد",
zap.String("method", "GET"),
zap.String("path", "/api/users"),
)

بهترین روش‌ها

به stdout/stderr بنویسید، نه به فایل

هشدار

فایل‌سیستم کانتینرها موقتی است. هر بار که اپلیکیشن ری‌استارت یا ری‌دیپلوی شود، تمام فایل‌های نوشته‌شده پاک می‌شوند.

اشتباه:

// این لاگ‌ها پس از ری‌استارت از بین می‌روند
const fs = require('fs');
fs.appendFileSync('/app/logs/app.log', message);

درست:

// stdout و stderr در ابرکلیک capture می‌شوند
console.log('این لاگ در ابرکلیک ذخیره می‌شود');
console.error('این خطا هم ذخیره می‌شود');

سطح‌بندی لاگ‌ها

برای استفاده بهتر از قابلیت جستجو (پلن رعد+)، سطح لاگ را در خروجی JSON مشخص کنید:

// Node.js — pino
logger.info('...'); // level: "info"
logger.warn('...'); // level: "warn"
logger.error('...'); // level: "error"
# Python — logging استاندارد
import logging
logging.basicConfig(level=logging.INFO)
logging.info("...")
logging.error("...")

اطلاعات حساس را لاگ نکنید

هرگز رمز عبور، توکن، یا اطلاعات کارت بانکی را در لاگ‌ها چاپ نکنید. لاگ‌ها برای اعضای تیم قابل مشاهده هستند.

// اشتباه
logger.info({ user: req.user, password: req.body.password }, 'ورود');

// درست
logger.info({ userId: req.user.id }, 'ورود موفق');

دسترسی به لاگ‌های دیپلوی قدیمی

# لیست دیپلوی‌های یک اپ
abrclick apps info myapp

# لاگ دیپلوی خاص
abrclick apps logs myapp --deployment dep_abc123

در داشبورد نیز از تب Deployments می‌توانید لاگ هر دیپلوی را به صورت جداگانه مشاهده کنید.


ارتقا پلن برای لاگ بیشتر

اگر لاگ‌های قدیمی‌تر برای شما مهم است یا به جستجو نیاز دارید:

  • ۲۴ ساعت نگه‌داری → پلن باران (۱,۳۶۴,۰۰۰ تومان/ماه)
  • ۳۰ روز + جستجو → پلن رعد (۵,۸۶۴,۰۰۰ تومان/ماه)
  • ۹۰ روز + جستجو → پلن طوفان (۱۱,۷۲۸,۰۰۰ تومان/ماه)

برای ارتقا از داشبورد ابرکلیک → بخش پلن اقدام کنید.