Log Level dastur ishlab chiqishda: bu nima, daraja turlari va konfiguratsiya

Muallif: IT Sectr Nashr etilgan: 2026-05-28 O'qish vaqti: 8 daq

Log Level — dasturchilarga ilovaning turli bosqichlarida chiqariladigan ma'lumot hajmini nazorat qilish imkonini beruvchi, log xabarlarining kritiklik darajasi bo'yicha tasnifi. Google Android Developers, 2024 ma'lumotlariga ko'ra, loglash darajasini to'g'ri tanlash production-da loglar hajmini 85–95% kamaytiradi va xatolarni aniqlashni tezlashtiradi. Har bir daraja o'z vazifasini hal qiladi — ishlab chiqish bosqichida disk raskadrovkadan production-da kritik nosozliklarni monitoring qilishgacha.

Asosiy fikrlar

  • Log Level — Verbose (batafsil disk raskadrovka) dan Error (kritik nosozliklar) gacha standartlashtirilgan kritiklik shkalasi
  • Verbose va Debug — ishlab chiqish uchun darajalar, unumdorlik uchun production yig'ilmalarida o'chiriladi
  • Info — asosiy hodisalar haqida ma'lumot xabarlari: ishga tushirish, avtorizatsiya, navigatsiya
  • Warn — darhol nosozlikka olib kelmaydigan potentsial muammolar haqida ogohlantirishlar
  • Error — dasturchining zudlik bilan e'tibor va tahlilini talab qiladigan kritik xatolar

Log Level nima?

Log Level — har bir log xabarining muhimligi va qayta ishlash shoshilinchligini belgilaydigan atribut. Zamonaviy iOS va Android platformalari 6–7 darajadan iborat yagona shkalani qo'llab-quvvatlaydi: maksimal batafsil (Verbose/Trace) dan kritik (Error/Assert) gacha. Darajani tanlash ilovaning joriy konfiguratsiyasida xabarning logga yozilishini aniqlaydi.

Log Level kontseptsiyasi kritiklik piramidasi printsipiga asoslanadi: daraja qanchalik yuqori bo'lsa, unda shunchalik kam xabarlar chiqariladi. Semaphore CI, 2024 ma'lumotlariga ko'ra, production ilovasida taqsimot quyidagicha ko'rinadi: Info — 60% xabarlar, Warn — 25%, Error — 10%, Debug — 5%. Verbose xabarlari production-da butunlay o'chirilishi kerak.

Har bir platforma Log Level ni o'z API si orqali amalga oshiradi. Android android.util.Log dan v(), d(), i(), w(), e() metodlari bilan foydalanadi. Apple — OSLog default, info, debug, error, fault darajalari bilan. Timber va CocoaLumberjack kabi kutubxonalar ushbu standart API lar ustiga qo'shimcha funksionallik qurishadi.

Google I/O 2023 ma'lumotlariga ko'ra, Log Level ni noto'g'ri tanlash production-da unumdorlik muammolarining 40% ga sabab bo'ladi. Dasturchilar Debug loglarini release yig'ilmasida qoldiradilar, bu esa diskka ortiqcha yozish va batareyaning tezlashtirilgan zaryadsizlanishiga olib keladi.

Loglash darajalarining turlari: Verbose dan Assert gacha

Verbose (TRACE) — faqat ishlab chiqish uchun mo'ljallangan eng batafsil daraja. Bu darajada barcha oraliq hisob-kitoblar, sikl iteratsiyalari, algoritm har bir qadamining natijalari chiqariladi. Android da bu darajaga Log.v() mos keladi, iOS da — debug tipidagi OSLog (iOS 14 gacha os_trace ishlatilgan).

Debug — ishlab chiqish va test paytida foydali bo'lgan disk raskadrovka xabarlari. Asosiy obyektlarning holati, SQL so'rovlarining natijalari, API chaqiruvlarining parametrlari haqida ma'lumot o'z ichiga oladi. Verbose dan farqli o'laroq, Debug xabarlari tuzilgan va semantik ahamiyatga ega. iOS da bu darajaga OSLogType.debug mos keladi.

Info — ilovaning odatdagi hodisalari haqida ma'lumot xabarlari: SDK ni ishga tushirish, muvaffaqiyatli avtorizatsiya, ekranni ochish, serverdan ma'lumot olish. Info xabarlari foydalanuvchilarning shaxsiy ma'lumotlarini o'z ichiga olmasligi va production tahlili uchun xavfsiz bo'lishi kerak. iOS da OSLogType.info, Android da Log.i() ishlatiladi.

Warn — potentsial muammolar haqida ogohlantirishlar. Ilova ishlashda davom etadi, ammo vaziyat e'tibor talab qiladi: kesh hajmi chegaraga yaqin, API ning eskirgan versiyasi, sekin tarmoq javobi, qayta ulanish urinishi. Android da — Log.w(), iOS da — OSLogType.default (ogohlantirishlar uchun).

Error — ilova so'ralgan operatsiyani bajara olmaydigan, ammo ishlashda davom etadigan kritik xatolar: API ga muvaffaqiyatsiz so'rov, ulanishning uzilishi, ma'lumotlar bazasiga yozish xatosi, ruxsatlarning yo'qligi. iOS da xatolar uchun OSLogType.error, Android da Log.e() ishlatiladi.

Assert (WTF) — „bu bo'lishi mumkin emas” holatini bildiruvchi eng yuqori daraja. Tizimning fundamental invariantlarini buzadigan xatolarni loglash uchun ishlatiladi. Android da Assert xabarlari sukut bo'yicha release yig'ilmalarida ko'rsatilmaydi. iOS da WTF (What a Terrible Failure) OSLogType.fault orqali qayta ishlanadi.

Android da Log Level dan foydalanish

Android Log API — android.util.Log paketidan o'rnatilgan loglash mexanizmi. 6 statik metodni taqdim etadi: Log.v(), Log.d(), Log.i(), Log.w(), Log.e() va Log.wtf(). Har bir metod tag (manba identifikatori satri) va msg (xabar matni) ni qabul qiladi.

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

    suspend fun loadUser(id: String): User {
        Log.d(TAG, "Foydalanuvchi yuklanmoqda: $id")

        return try {
            val response = api.fetchUser(id)
            Log.i(TAG, "Foydalanuvchi muvaffaqiyatli yuklandi")
            response.toUser()
        } catch (e: Exception) {
            Log.e(TAG, "Foydalanuvchini yuklash muvaffaqiyatsiz tugadi: ${e.message}")
            throw e
        }
    }
}

Darajalar bo'yicha filtrlash Android Logcat da ADB orqali amalga oshiriladi: adb logcat *:E faqat Error xabarlarini ko'rsatadi. Production yig'ilmalarida barcha Log.v() va Log.d() chaqiruvlari ProGuard/R8 tomonidan minifikatsiya yoqilganda o'chiriladi. Log.i(), Log.w() va Log.e() qoladi, shuning uchun nozik ma'lumotlarni ushbu metodlar orqali chiqarmaslik muhim.

Runtime da maxsus filtrlash uchun Android Log.isLoggable(tag, level) — berilgan tag uchun ko'rsatilgan daraja yoqilganligini tekshiruvchi metodni taqdim etadi. Bu ilovani qayta qurmasdan ma'lum modul uchun batafsil loglashni dinamik ravishda yoqish imkonini beradi.

iOS va macOS da Log Level dan foydalanish

OSLog — eskirgan NSLog o'rnini bosgan Apple ning yagona loglash tizimi. OSLog 5 darajani taqdim etadi: debug, info, default (notice), error va fault. Asosiy afzallik — formatlangan satrlar va konsol orqali dinamik filtrlashni qo'llab-quvvatlovchi tuzilgan loglash.

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)")
    }
}

Filtrlash tizimi OSLog operatsion tizim darajasida ishlaydi. Debug xabarlari faqat debugger ulanganda yoki -com.apple.CoreData.Logging.debug 1 argumenti yoqilganda yoziladi. Info xabarlari qurilma xotirasida to'planadi (512 KB gacha) va Console.app orqali mavjud. Error va fault doimiy ravishda yoziladi va crash-reporting tizimlari orqali yig'ish uchun mavjud.

OSLog ning muhim xususiyati: placeholder li formatlangan satrlar. Swift satr interpolyatsiyasi (har doim, darajadan qat'iy nazar hisoblanadi) o'rniga, OSLog nozik ma'lumotlarni ajratish uchun %{public}@ va %{private}@ bilan os_log formatidan foydalanadi. Private parametrlar production loglarida maskalanadi.

Production vs Debug: darajalarni filtrlashni qanday sozlash

Asosiy qoida — production da minimal darajalar to'plami: Info, Warn, Error, Assert. Debug va Verbose o'chirilishi kerak. Sabab xavfsizlik emas, balki unumdorlik: har bir log chaqiruvi, hatto xabar chiqarilmasa ham, satrni formatlash uchun protsessor vaqtini oladi.

Dangasa satr formatlash

Kritik optimallashtirish — log chaqiruvlarida hech qachon satr interpolyatsiyasidan foydalanmang. Agar satr log() chaqiruvidan oldin shakllantirilsa, protsessor vaqti hatto o'chirilgan darajada ham sarflanadi. Lambda yoki himoya shartlari orqali dangasa formatlashdan foydalaning.

Android da bu maqsadga Log.isLoggable() metodi, OSLog da — placeholder li formatlangan satrlarning native qo'llab-quvvatlanishi xizmat qiladi. Android uchun Timber muammoni timber.log.Tree orqali daraxt ichida darajani tekshirish bilan hal qiladi.

Darajani uchish vaqtida dinamik o'zgartirish

Remote Log Level — loglash darajasi Firebase Remote Config yoki shunga o'xshash xizmat orqali serverdan boshqariladigan amaliyot. Agar production da murakkab xato yuz bersa, dasturchi tanlangan foydalanuvchilar guruhining qurilmalarida ma'lum modul uchun Debug loglashni masofadan yoqishi mumkin.

Firebase, 2024 ma'lumotlariga ko'ra, bu amaliyot noyob xatolarni aniqlash vaqtini 60% ga kamaytiradi va debug yig'ilmasini o'rnatmasdan muammoning to'liq rasmini olish imkonini beradi. Asosiy cheklov — loglar faqat konfiguratsiya olingandan keyin ilovaning navbatdagi ishga tushirilishida yoqiladi.

Yig'ilma turi bo'yicha avtomatik filtrlash

BuildConfig.DEBUG Android da va #if DEBUG Swift da — release yig'ilmalarida disk raskadrovka darajalarini o'chiruvchi standart shartli kompilyatsiya mexanizmlari. Toza arxitektura uchun Log Level tanlashni DI konteyneriga yoki logger fabrikasiga chiqarish tavsiya etiladi, shunda biznes mantiq shartli direktivalar bilan aralashmasin.

Loglash darajasini tanlashda eng yaxshi amaliyotlar

Birinchi qoida — har bir log chaqiruvi „kim, nima, qachon” degan savolga javob berishi kerak. Kim — komponent yoki modul (Android da tag, iOS da category). Nima — konkret hodisa yoki holat o'zgarishi. Qachon — loglash tizimi tomonidan avtomatik qo'yiladigan vaqt belgisi.

Ikkinchi qoida — nozik ma'lumotlarni Info va undan yuqori darajalarda loglamang. Parollar, tokenlar, elektron pochtalar, telefon raqamlari, aniq geo-koordinatalar — production ga tushadigan har qanday logda qat'iyan man etiladi. Zarur bo'lganda maskalashdan foydalaning: „email: us***@example.com”.

Uchinchi qoida — Warn darajasi dasturchining mas'uliyat zonasi, Error — jamoaning. Warn „bu yerda potentsial muammo bor, kuzat” degani. Error — „bu yerda muammo bor, tuzat”. Kutilgan va qayta ishlangan holatlar uchun (masalan, API 404 xatosi) Error dan foydalanmang.

To'rtinchi qoida — izchillik. Butun loyiha tag va kategoriyalarni nomlash uchun yagona konvensiyalardan foydalanishi kerak. Android taglari uchun ClassName.methodName, iOS kategoriyalari uchun module.subsystem tavsiya etiladi. Bu komponent bo'yicha loglarni tez filtrlash imkonini beradi.

Beshinchi qoida — loglarni sinab ko'ring. Unit testlarda ma'lum stsenariylarda to'g'ri Log Level chaqirilganligini tekshiring. Buning uchun mock loglash kutubxonalari mavjud: Android uchun Mockito, iOS uchun Cuckoo. Testlarda darajalarni tekshirish disk raskadrovka xabarlarining production ga sizib chiqishini oldini oladi.

Tez-tez beriladigan savollar

Production da Debug loglarini qoldirsam nima bo'ladi?

Tezlashtirilgan batareya zaryadsizlanishi va diskka ortiqcha yozish. Har bir Debug log satrni formatlaydi va ma'lumotni buferga yozadi. Flash xotirali qurilmalarda bu yuritkichning eskirishini tezlashtiradi. Bundan tashqari, Debug loglari production da ko'rish uchun mavjud bo'lmagan nozik ma'lumotlarni o'z ichiga olishi mumkin.

Tarmoq so'rovlarini loglash uchun qaysi Log Level dan foydalanish kerak?

Debug — so'rov va javob tanasi, sarlavhalar va status kodi uchun. Info — so'rovning bajarilish fakti uchun (URL, metod, davomiylik). Error — 4xx/5xx kodi bilan muvaffaqiyatsiz so'rovlar uchun. Production da tarmoq loglari uchun hech qachon Verbose dan foydalanmang.

OSLogType.default OSLogType.info dan qanday farq qiladi?

OSLogType.default (notice darajasi) — o'rtacha muhimlikdagi xabarlar, tizim logida saqlanadi va Console.app da ko'rinadi. OSLogType.info — texnik xabarlar, doimiy saqlanmaydi, faqat Instruments orqali faol profillash paytida mavjud.

ProGuard Android da Log chaqiruvlarini qanday qayta ishlaydi?

R8/ProGuard minifikatsiya yoqilganda release yig'ilmasida Log.v() va Log.d() ni olib tashlaydi. Log.i(), Log.w(), Log.e() saqlanadi. Barcha loglarni to'liq olib tashlash uchun barcha darajalarni ko'rsatuvchi maxsus qoida -assumenosideeffects class android.util.Log talab qilinadi.

Har bir metod o'zining boshlanishi va tugashini loglashi kerakmi?

Yo'q — haddan tashqari loglash o'qish qulayligi va unumdorlikni yomonlashtiradi. Kirishni faqat murakkab yoki asinxron metodlarda loglang. Sinxron metodlar uchun qaytish yoki xato nuqtasida bitta log yetarli. Chaqiruvlarni kuzatish uchun Debug darajasidan foydalaning.

Xulosa

  • Log Level — har bir log xabarining ko'rinishini belgilovchi Verbose dan Assert gacha kritiklik shkalasi
  • Verbose va Debug — ishlab chiqish uchun mo'ljallangan va production yig'ilmalarida o'chirilishi kerak
  • Info — production tahlili uchun xavfsiz bo'lgan ilovaning asosiy hodisalari
  • Warn — zudlik bilan tuzatish talab qilmaydigan potentsial muammolar
  • Error — ishlab chiqish jamoasi aralashuvini talab qiladigan kritik nosozliklar
  • Android Log API tag + level dan foydalanadi, iOS da OSLog — subsystem + category + level
  • Dangasa formatlash va shartli kompilyatsiya — production da loglashni optimallashtirishning asosiy usullari

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing