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

لاگ‌گیری با SDK iOS

لاگ‌گیری ساخت‌یافته برای اپ‌های iOS با ارسال دسته‌ای خودکار، backoff نمایی و آگاهی از چرخه‌ی عمر اپ، با SDK بومی Swift.

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

لاگ‌گیری ساخت‌یافته برای اپ‌های iOS با ارسال دسته‌ای خودکار، backoff نمایی و آگاهی از چرخه‌ی عمر اپ. لاگ‌ها بافر می‌شوند و دسته‌دسته فرستاده می‌شوند تا مصرف شبکه و باتری کم بماند.

ارسال دسته‌ای خودکار

لاگ‌ها بافر می‌شوند و دسته‌دسته فرستاده می‌شوند (پیش‌فرض: ۵۰)

backoff نمایی

دسته‌های ناموفق با تأخیرهای رو به افزایش دوباره فرستاده می‌شوند (۲ ثانیه، ۴ ثانیه، ۸ ثانیه... تا ۶۰ ثانیه، حداکثر ۱۰ بار)

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

لاگ‌ها فقط در حافظه بافر می‌شوند (enableOfflineStorage برای خطاهاست، نه لاگ‌ها)؛ وقتی بافر از ۱۰۰۰ بیشتر شود، قدیمی‌ترین‌ها دور ریخته می‌شوند

تایمر تنبل

تایمر فقط وقتی بافر لاگ دارد اجرا می‌شود — در حالت بیکار باتری مصرف نمی‌شود

اطلاعات کاربر

شناسه‌ی کاربری که با AbrovaTrace.shared.setUserId() تنظیم شده، خودکار پیوست می‌شود

Swift بومی

با Swift ساخته شده و از iOS 12+، macOS 10.14+ و tvOS 12+ پشتیبانی می‌کند

فعال کردن لاگ‌گیری#

پس از مقداردهی AbrovaTrace، سرویس لاگ‌گیری را فعال کنید. (اگر بدون فعال کردن، یکی از متدهای لاگ را صدا بزنید، لاگ‌گیری خودکار و بدون sourceId روشن می‌شود.) لاگ‌ها در کنسول زیر ابرووا تریس › Logs نمایش داده می‌شوند؛ این‌ها از captureMessage جدا هستند که به پیام‌ها می‌رود.

UIKit

swift
import UIKit
import AbrovaTrace

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // Initialize AbrovaTrace first
        let config = AbrovaTraceConfigBuilder(apiKey: "ab_live_YOUR_API_KEY")
            .environment("production")
            .release(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String)
            .build()

        AbrovaTrace.shared.initialize(config: config)

        // Enable logging with a source identifier
        AbrovaTrace.shared.enableLogging(
            sourceId: "my-ios-app",
            sourceName: "My iOS App",
            batchSize: 50,
            flushInterval: 5.0
        )

        return true
    }
}

SwiftUI

swift
import SwiftUI
import AbrovaTrace

@main
struct MyApp: App {
    init() {
        let config = AbrovaTraceConfigBuilder(apiKey: "ab_live_YOUR_API_KEY")
            .environment("production")
            .build()

        AbrovaTrace.shared.initialize(config: config)

        // Enable logging
        AbrovaTrace.shared.enableLogging(
            sourceId: "my-ios-app",
            sourceName: "My iOS App"
        )
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

ارسال لاگ#

متدهای میان‌بر

swift
// Info log
AbrovaTrace.shared.info("User login successful", metadata: [
    "user_id": "user_123"
])

// Warning log
AbrovaTrace.shared.warn("Slow API response", metadata: [
    "endpoint": "/api/users",
    "duration_ms": 2500
])

// Error log
AbrovaTrace.shared.logErrorMessage("Database query failed", metadata: [
    "query": "SELECT * FROM users",
    "error": "Connection timeout"
])

// Debug log
AbrovaTrace.shared.logDebugMessage("Cache hit for key: user_123")

// Trace log
AbrovaTrace.shared.trace("Entering function processPayment()")

// Fatal log
AbrovaTrace.shared.fatal("App crashed unexpectedly", metadata: [
    "last_screen": "checkout"
])

متد عمومی log

swift
// Generic log with explicit level
AbrovaTrace.shared.log("Custom event", level: .info, metadata: ["key": "value"])

سطح‌های لاگ#

  • trace — AbrovaTrace.shared.trace() — دیباگ بسیار جزئی در سطح trace
  • debug — AbrovaTrace.shared.logDebugMessage() — اطلاعات دیباگ در زمان توسعه
  • info — AbrovaTrace.shared.info() — اطلاعات عمومی اپ
  • warn — AbrovaTrace.shared.warn() — هشدار درباره‌ی مشکل‌های احتمالی
  • error — AbrovaTrace.shared.logErrorMessage() — خطاهایی که باید بررسی شوند
  • fatal — AbrovaTrace.shared.fatal() — خطاهای بحرانی یا غیرقابل بازیابی

استفاده در ViewControllerها#

swift
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        AbrovaTrace.shared.info("ViewController loaded", metadata: ["screen": "main"])
    }

    func handlePurchase() {
        AbrovaTrace.shared.info("Purchase initiated", metadata: [
            "product_id": "premium_pack",
            "amount": 99.99
        ])

        do {
            try processPurchase()
            AbrovaTrace.shared.info("Purchase completed", metadata: ["amount": 99.99])
        } catch {
            AbrovaTrace.shared.logErrorMessage("Purchase failed", metadata: [
                "error": error.localizedDescription,
                "product_id": "premium_pack"
            ])
            AbrovaTrace.shared.captureError(error)
        }
    }

    func processPurchase() throws { /* ... */ }
}

ویوهای SwiftUI

swift
struct ContentView: View {
    var body: some View {
        Button("Purchase") {
            AbrovaTrace.shared.info("Purchase button tapped")
            handlePurchase()
        }
        .onAppear {
            AbrovaTrace.shared.info("ContentView appeared")
        }
    }

    func handlePurchase() {
        // Purchase logic with logging
    }
}

عملیات دستی#

swift
// Force flush all buffered logs
AbrovaTrace.shared.flushLogs { success in
  if success {
      print("Logs flushed successfully")
  }
}

// Check buffer status
let pendingCount = AbrovaTrace.shared.pendingLogCount
print("Pending logs: \(pendingCount)")

پیکربندی#

گزینهنوعاجباریتوضیح
sourceIdString?خیرشناسه برای ارسال دسته‌ای (مثلاً "my-ios-app"). بدون آن، هر لاگ بافرشده با یک درخواست جدا فرستاده می‌شود و ارسال‌های ناموفق دوباره تکرار نمی‌شوند
sourceNameString?خیرنام خوانا برای این منبع
batchSizeIntخیروقتی بافر به این اندازه برسد، ارسال انجام می‌شود (پیش‌فرض: 50)
flushIntervalTimeIntervalخیرحداکثر زمان پیش از ارسال، به ثانیه (پیش‌فرض: 5.0)

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

زود فعال کنید

لاگ‌گیری را درست بعد از مقداردهی AbrovaTrace فعال کنید تا همه‌ی رویدادها ثبت شوند

از sourceId استفاده کنید

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

metadata اضافه کنید

metadata ساخت‌یافته (شناسه‌ی کاربر، نام صفحه و…) اضافه کنید تا دیباگ ساده‌تر شود

سطح مناسب را انتخاب کنید

برای رویدادهای عادی info، برای مشکل‌های احتمالی warn و برای شکست‌ها error

هنگام خاموش شدن ارسال کنید

لاگ‌ها وقتی اپ به پس‌زمینه می‌رود و هنگام terminate خودکار فرستاده می‌شوند؛ برای مسیرهای دیگرِ بسته شدن، AbrovaTrace.shared.flushLogs() را صدا بزنید

زیاده‌روی نکنید

در حلقه‌های فشرده لاگ نگیرید — بافر سقف دارد و قدیمی‌ترین لاگ‌ها را دور می‌ریزد

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