لاگها
ابرکلیک دو نوع لاگ برای هر اپلیکیشن فراهم میکند: لاگهای بیلد که در زمان دیپلوی تولید میشوند، و لاگهای رانتایم که خروجی اپلیکیشن در حال اجرا را نشان میدهند.
لاگهای بیلد
هر بار که دستور 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 میتوانید لاگ هر دیپلوی را به صورت جداگانه مشاهده کنید.
ارتقا پلن برای لاگ بیشتر
اگر لاگهای قدیمیتر برای شما مهم است یا به جستجو نیاز دارید:
- ۲۴ ساعت نگهداری → پلن باران (۱,۳۶۴,۰۰۰ تومان/ماه)
- ۳۰ روز + جستجو → پلن رعد (۵,۸۶۴,۰۰۰ تومان/ماه)
- ۹۰ روز + جستجو → پلن طوفان (۱۱,۷۲۸,۰۰۰ تومان/ماه)
برای ارتقا از داشبورد ابرکلیک → بخش پلن اقدام کنید.