جریان زنده لاگ (Live Log Streaming) در iOS

ارسال لاگ‌های عملیاتی و تله‌متری زنده به دیدبان با استفاده از یک بافر حلقوی بهینه، ارسال دسته‌ای خودکار و بدون تأثیر بر کارایی thread اصلی.

سطوح شدت لاگ

دیدبان چهار سطح شدت استاندارد را پشتیبانی می‌کند. پیام (message) همیشه اولین آرگومان است:

MyViewModel.swiftswift
// Convenience methods — message is the first (unlabeled) argument
Didban.debug("Refreshing user tokens", tag: "auth")
Didban.info("Item added to cart", tag: "cart", attributes: ["sku": "ABC-123", "qty": 2])
Didban.warn("Retrying after timeout", tag: "network", attributes: ["attempt": 2])
Didban.error("Failed to persist cache", tag: "storage", attributes: ["error": "disk_full"])

// Or with explicit LogLevel:
Didban.log("Order submitted", level: .info, tag: "checkout", attributes: ["amount": 49.99])

فلاش فوری (Flush)

برای ارسال فوری لاگ‌های معلق پیش از انتقال‌های مهم (مثلاً پایان تماس VoIP یا خروج کاربر)، از flush استفاده کنید:

CheckoutView.swiftswift
Didban.info("Payment confirmed", tag: "checkout", attributes: ["orderId": orderId])
Didban.flush() // ensure the log is uploaded before dismissing the view

نحوه کارکرد

  • بافر حلقوی (Ring Buffer): تمام لاگ‌ها در یک بافر حلقوی با ظرفیت ۲۰۰ مورد درون حافظه نگهداری می‌شوند. لاگ‌های قدیمی‌تر به‌طور خودکار حذف می‌شوند.
  • ارسال دسته‌ای (Batching): ارسال خودکار پس از انباشت ۲۰ لاگ یا گذشت ۱۵ ثانیه — هر کدام زودتر باشد.
  • فلاش خودکار در پس‌زمینه: با دریافت UIApplication.didEnterBackgroundNotification، تمام لاگ‌های معلق به‌طور خودکار ارسال می‌شوند.
  • غیر مسدودکننده: تمام ارسال‌ها در یک صف پس‌زمینه انجام می‌شوند و هیچ تأثیری بر thread اصلی یا UI ندارند.

ویژگی‌های ساختاریافته (Attributes)

پارامتر attributes یک دیکشنری اختیاری از داده‌های ساختاریافته است که در داشبورد در یک modal قابل بررسی است:

NetworkSession.swiftswift
Didban.warn(
    "API request slow",
    tag: "network",
    attributes: [
        "endpoint": "/v1/products",
        "latencyMs": 3200,
        "statusCode": 200,
        "retryCount": 1
    ]
)
یادداشت

لاگ‌ها با کلید Ingestion (didban_ing_...) احراز هویت می‌شوند — همان کلیدی که در Didban.initialize() ارائه می‌دهید.

حریم خصوصی

هشدار امنیتی

هرگز اطلاعات حساس را در لاگ‌ها قرار ندهید. از درج گذرواژه‌ها، توکن‌های احراز هویت، شماره کارت بانکی یا اطلاعات شخصی قابل شناسایی (PII) در پیام‌ها یا attributes خودداری کنید.