Log Level tətbiqlərin hazırlanmasında: bu nədir, səviyyə növləri və konfiqurasiya

Müəllif: IT Sectr Dərc olunub: 2026-05-28 Oxuma vaxtı: 8 dəq

Log Level — tətbiqin müxtəlif mərhələlərində proqramçılara çıxarılan məlumatın həcmini idarə etməyə imkan verən, log mesajlarının kritiklik dərəcəsinə görə təsnifatı. Google Android Developers, 2024 məlumatlarına görə, loglama səviyyəsinin düzgün seçilməsi production-da logların həcmini 85–95% azaldır və səhv diaqnostikasını sürətləndirir. Hər bir səviyyə öz vəzifəsini həll edir — inkişaf mərhələsində debug-dan production-da kritik nasazlıqların monitorinqinə qədər.

Əsas məqamlar

  • Log Level — Verbose (ətraflı debug) dən Error (kritik nasazlıqlar) qədər standartlaşdırılmış kritiklik şkalası
  • Verbose və Debug — inkişaf üçün səviyyələr, performans üçün production qurmalarında söndürülür
  • Info — əsas hadisələr haqqında məlumat mesajları: başlatma, avtorizasiya, naviqasiya
  • Warn — dərhal nasazlığa səbəb olmayan potensial problemlər barədə xəbərdarlıqlar
  • Error — proqramçının dərhal diqqət və təhlilini tələb edən kritik səhvlər

Log Level nədir?

Log Level — hər bir log mesajının əhəmiyyətini və emal təciliyini müəyyən edən atributdur. Müasir iOS və Android platformaları 6–7 səviyyədən ibarət vahid şkala dəstəkləyir: maksimum detallı (Verbose/Trace) dən kritik (Error/Assert) qədər. Səviyyənin seçimi tətbiqin cari konfiqurasiyasında mesajın loga yazılıb-yazılmayacağını müəyyən edir.

Log Level konsepsiyası kritiklik piramidası prinsipinə əsaslanır: səviyyə nə qədər yüksəkdirsə, o səviyyədə bir o qədər az mesaj çıxarılır. Semaphore CI, 2024 məlumatlarına görə, production tətbiqində paylama belə görünür: Info — 60% mesaj, Warn — 25%, Error — 10%, Debug — 5%. Verbose mesajları production-da tamamilə söndürülməlidir.

Hər bir platforma Log Level-i öz API-si vasitəsilə tətbiq edir. Android android.util.Log istifadə edir v(), d(), i(), w(), e() metodları ilə. Apple — OSLog default, info, debug, error, fault səviyyələri ilə. Timber və CocoaLumberjack kimi kitabxanalar bu standart API-lər üzərində əlavə funksionallıq qurur.

Google I/O 2023 məlumatlarına görə, Log Level-in səhv seçilməsi production-da performans problemlərinin 40%-nin səbəbidir. Proqramçılar Debug loglarını release qurmasında saxlayır ki, bu da diskə həddindən artıq yazıya və batareyanın sürətlənmiş boşalmasına gətirib çıxarır.

Loglama səviyyələrinin növləri: Verbose-dan Assert-ə

Verbose (TRACE) — yalnız inkişaf üçün nəzərdə tutulmuş ən detallı səviyyə. Bu səviyyədə bütün aralıq hesablamalar, dövr iterasiyaları, alqoritmin hər addımının nəticələri çıxarılır. Android-də bu səviyyəyə Log.v() uyğun gəlir, iOS-da — debug tipli OSLog (iOS 14-dən əvvəl os_trace istifadə olunurdu).

Debug — inkişaf və test zamanı faydalı olan debug mesajları. Əsas obyektlərin vəziyyəti, SQL sorğularının nəticələri, API çağırışlarının parametrləri haqqında məlumat ehtiva edir. Verbose-dan fərqli olaraq, Debug mesajları strukturlaşdırılmış və semantik əhəmiyyətlidir. iOS-da bu səviyyəyə OSLogType.debug uyğun gəlir.

Info — tətbiqin standart hadisələri haqqında məlumat mesajları: SDK-nın işə salınması, uğurlu avtorizasiya, ekranın açılması, serverdən məlumatın alınması. Info mesajları istifadəçilərin şəxsi məlumatlarını ehtiva etməməli və production təhlili üçün təhlükəsiz olmalıdır. iOS-da OSLogType.info, Android-də Log.i() istifadə olunur.

Warn — potensial problemlər barədə xəbərdarlıqlar. Tətbiq işləməyə davam edir, lakin vəziyyət diqqət tələb edir: keş ölçüsü limitə yaxınlaşır, API-nin köhnəlmiş versiyası, yavaş şəbəkə cavabı, təkrar qoşulma cəhdi. Android-də — Log.w(), iOS-da — OSLogType.default (xəbərdarlıqlar üçün).

Error — tətbiqin tələb olunan əməliyyatı yerinə yetirə bilmədiyi, lakin işləməyə davam etdiyi kritik səhvlər: API-ə uğursuz sorğu, əlaqənin kəsilməsi, verilənlər bazasına yazı xətası, icazələrin olmaması. iOS-da səhvlər üçün OSLogType.error, Android-də Log.e() istifadə olunur.

Assert (WTF) — „bu baş verə bilməz” vəziyyətini bildirən ən yüksək səviyyə. Sistemin fundamental invariantlarını pozan səhvlərin loglanması üçün istifadə olunur. Android-də Assert mesajları default olaraq release qurmalarında göstərilmir. iOS-da WTF (What a Terrible Failure) OSLogType.fault vasitəsilə işlənir.

Android-də Log Level istifadəsi

Android Log API — android.util.Log paketindən daxili loglama mexanizmi. 6 statik metod təmin edir: Log.v(), Log.d(), Log.i(), Log.w(), Log.e() və Log.wtf(). Hər bir metod tag (mənbə identifikator sətri) və msg (mesaj mətni) qəbul edir.

kotlin
class UserRepository {
    companion object {
        private val TAG = "UserRepo"
    }

    suspend fun loadUser(id: String): User {
        Log.d(TAG, "İstifadəçi yüklənir: $id")

        return try {
            val response = api.fetchUser(id)
            Log.i(TAG, "İstifadəçi uğurla yükləndi")
            response.toUser()
        } catch (e: Exception) {
            Log.e(TAG, "İstifadəçi yüklənə bilmədi: ${e.message}")
            throw e
        }
    }
}

Səviyyələrə görə filtrləmə Android Logcat-da ADB vasitəsilə həyata keçirilir: adb logcat *:E yalnız Error mesajlarını göstərəcək. Production qurmalarında bütün Log.v() və Log.d() çağırışları ProGuard/R8 tərəfindən minifikasiya aktiv olduqda silinir. Log.i(), Log.w() və Log.e() qalır, buna görə də həssas məlumatları bu metodlar vasitəsilə çıxarmamaq vacibdir.

Runtime-da xüsusi filtrləmə üçün Android Log.isLoggable(tag, level) — müəyyən tag üçün göstərilən səviyyənin aktiv olub-olmadığını yoxlayan metodu təqdim edir. Bu, tətbiqi yenidən qurmadan konkret modul üçün detallı loglamanı dinamik olaraq aktivləşdirməyə imkan verir.

iOS və macOS-da Log Level istifadəsi

OSLog — köhnəlmiş NSLog-u əvəz edən Apple-ın vahid loglama sistemi. OSLog 5 səviyyə təqdim edir: debug, info, default (notice), error və fault. Əsas üstünlük — formatlaşdırılmış sətirlər və konsol vasitəsilə dinamik filtrləmə dəstəyi ilə strukturlaşdırılmış loglamadır.

swift
import OSLog

let logger = Logger(
    subsystem: "com.example.app",
    category: "network"
)

func fetchData(from url: URL) {
    logger.debug("Starting request to \(url.absoluteString)")

    do {
        let data = try Data(contentsOf: url)
        logger.info("Received \(data.count) bytes")
    } catch {
        logger.error("Request failed: \(error.localizedDescription)")
    }
}

Filtrləmə sistemi OSLog əməliyyat sistemi səviyyəsində işləyir. Debug mesajları yalnız debugger qoşulduqda və ya -com.apple.CoreData.Logging.debug 1 arqumenti aktiv edildikdə yazılır. Info mesajları cihazın yaddaşında toplanır (512 KB-a qədər) və Console.app vasitəsilə əlçatandır. Error və fault daim yazılır və crash-reporting sistemləri vasitəsilə toplanmaq üçün əlçatandır.

OSLog-un mühüm xüsusiyyəti: placeholder-larla formatlaşdırılmış sətirlər. Swift sətir interpolyasiyası (həmişə, səviyyədən asılı olmayaraq hesablanır) əvəzinə, OSLog həssas məlumatları ayırmaq üçün %{public}@ və %{private}@ ilə os_log formatından istifadə edir. Private parametrlər production loglarında maskalanır.

Production vs Debug: səviyyə filtrləməsini necə qurmaq

Əsas qayda — production-da minimal səviyyə dəsti: Info, Warn, Error, Assert. Debug və Verbose söndürülməlidir. Səbəb təhlükəsizlikdən çox performansdadır: hər bir log çağırışı, hətta mesaj çıxarılmasa belə, sətrin formatlaşdırılması üçün prosessor vaxtı aparır.

Tənbəl sətir formatlaşdırması

Kritik optimallaşdırma — log çağırışlarında heç vaxt sətir interpolyasiyasından istifadə etməyin. Əgər sətir log() çağırışından əvvəl formalaşdırılırsa, prosessor vaxtı hətta söndürülmüş səviyyədə belə sərf olunur. Lambda və ya mühafizə şərtləri vasitəsilə tənbəl formatlaşdırmadan istifadə edin.

Android-də bu məqsədə Log.isLoggable() metodu, OSLog-da — placeholder-larla formatlaşdırılmış sətirlərin native dəstəyi xidmət edir. Android üçün Timber problemi timber.log.Tree vasitəsilə ağac daxilində səviyyə yoxlanışı ilə həll edir.

Səviyyənin uçuş zamanı dinamik dəyişdirilməsi

Remote Log Level — loglama səviyyəsinin Firebase Remote Config və ya oxşar xidmət vasitəsilə serverdən idarə olunduğu təcrübə. Production-da mürəkkəb səhv baş verərsə, proqramçı seçilmiş istifadəçi qrupunun cihazlarında konkret modul üçün Debug loglamasını uzaqdan aktivləşdirə bilər.

Firebase, 2024 məlumatlarına görə, bu təcrübə nadir səhvlərin diaqnostika vaxtını 60% azaldır və debug qurması quraşdırmadan problemin tam mənzərəsini əldə etməyə imkan verir. Əsas məhdudiyyət — loglar yalnız tətbiq konfiqurasiyanı aldıqdan sonra növbəti başlatmada aktivləşir.

Qurma növünə görə avtomatik filtrləmə

BuildConfig.DEBUG Android-də və #if DEBUG Swift-də — release qurmalarında debug səviyyələrini söndürən standart şərti kompilyasiya mexanizmləri. Təmiz arxitektura üçün Log Level seçimini DI konteynerinə və ya logger fabrikinə çıxarmaq tövsiyə olunur ki, biznes məntiqi şərti direktivlərlə qarışmasın.

Loglama səviyyəsi seçərkən best practices

Birinci qayda — hər bir log çağırışı „kim, nə, nə vaxt” sualına cavab verməlidir. Kim — komponent və ya modul (Android-də tag, iOS-da category). Nə — konkret hadisə və ya vəziyyət dəyişikliyi. Nə vaxt — loglama sistemi tərəfindən avtomatik qoyulan zaman damğası.

İkinci qayda — həssas məlumatları Info və yuxarı səviyyələrdə loglamayın. Parollar, tokenlər, e-poçtlar, telefon nömrələri, dəqiq geo-koordinatlar — production-a düşən hər hansı logda qəti qadağandır. Lazım olduqda maskalamadan istifadə edin: “e-mail: us***@example.com”.

Üçüncü qayda — Warn səviyyəsi proqramçının məsuliyyət zonasıdır, Error — komandanın. Warn “buroda potensial problem var, izlə” deməkdir. Error — “buroda problem var, düzəlt”. Gözlənilən və işlənmiş vəziyyətlər üçün (məsələn, API 404 xətası) Error istifadə etməyin.

Dördüncü qayda — ardıcıllıq. Bütün layihə tag və kateqoriyaların adlandırılması üçün vahid konvensiyalardan istifadə etməlidir. Android tag-ları üçün ClassName.methodName, iOS kateqoriyaları üçün module.subsystem tövsiyə olunur. Bu, komponent üzrə logları tez filtrləməyə imkan verir.

Beşinci qayda — logları test edin. Vahid testlərdə müəyyən ssenarilərdə düzgün Log Level-in çağırıldığını yoxlayın. Bunun üçün mock loglama kitabxanaları mövcuddur: Android üçün Mockito, iOS üçün Cuckoo. Testlərdə səviyyələrin yoxlanılması debug mesajlarının production-a sızmasının qarşısını alır.

Tez-tez verilən suallar

Production-da Debug loglarını saxlasam nə olar?

Sürətlənmiş batareya boşalması və diskə həddindən artıq yazı. Hər bir Debug log sətri formatlaşdırır və məlumatı buferə yazır. Flash yaddaşlı cihazlarda bu, daşıyıcının aşınmasını sürətləndirir. Bundan əlavə, Debug logları production-da baxış üçün əlçatmaz olan həssas məlumatlar ehtiva edə bilər.

Şəbəkə sorğularının loglanması üçün hansı Log Level istifadə edilməlidir?

Debug — sorğu və cavabın gövdəsi, başlıqlar və status kodu üçün. Info — sorğunun yerinə yetirilməsi faktı üçün (URL, metod, müddət). Error — 4xx/5xx kodu ilə uğursuz sorğular üçün. Production-da şəbəkə logları üçün heç vaxt Verbose istifadə etməyin.

OSLogType.default OSLogType.info-dan nə ilə fərqlənir?

OSLogType.default (notice səviyyəsi) — orta əhəmiyyətli mesajlar, sistem logunda saxlanılır və Console.app-da görünür. OSLogType.info — texniki mesajlar, daimi saxlanılmır, yalnız Instruments vasitəsilə aktiv profilləmə zamanı əlçatandır.

ProGuard Android-də Log çağırışlarını necə emal edir?

R8/ProGuard release qurmasında minifikasiya aktiv olduqda Log.v() və Log.d()-ni silir. Log.i(), Log.w(), Log.e() saxlanılır. Bütün logların tam silinməsi üçün bütün səviyyələri göstərən xüsusi qayda -assumenosideeffects class android.util.Log tələb olunur.

Hər bir metod öz başlanğıcını və sonunu loglamalıdırmı?

Xeyr — həddindən artıq loglama oxunaqlılığı və performansı pisləşdirir. Girişi yalnız mürəkkəb və ya asinxron metodlarda loglayın. Sinxron metodlar üçün qayıdış və ya səhv nöqtəsində bir log kifayətdir. Çağırışların izlənməsi üçün Debug səviyyəsindən istifadə edin.

Nəticə

  • Log Level — hər bir log mesajının görünürlüyünü müəyyən edən Verbose-dan Assert-ə qədər kritiklik şkalası
  • Verbose və Debug — inkişaf üçün nəzərdə tutulub və production qurmalarında söndürülməlidir
  • Info — production təhlili üçün təhlükəsiz olan tətbiqin əsas hadisələri
  • Warn — dərhal düzəliş tələb etməyən potensial problemlər
  • Error — inkişaf komandasının müdaxiləsini tələb edən kritik nasazlıqlar
  • Android Log API tag + level istifadə edir, iOS-da OSLog — subsystem + category + level
  • Tənbəl formatlaşdırma və şərti kompilyasiya — production-da loglamanın optimallaşdırılmasının əsas üsulları

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun