|
| 1 | +--- |
| 2 | +description: Muhammad Xodjayev |
| 3 | +--- |
| 4 | + |
1 | 5 | # Logging
|
2 | 6 |
|
| 7 | +**.NET’da log** qilish (qayd qilish) oson ishlardan biri albatta. Lekin undan to’g’ri foydalana olish bu sizning darajangizni ham aniqlab berishi mumkin. Log qilishda ehtiyot bo’lish kerak, lekin qanday? Bugun **ILogger** o’zi nima va qayerdan kelib qolyapti, uni qayerda va qanday holatda ishlatsak bo’ladi shularni batafsil ko’rib chiqamiz, kettik! |
| 8 | + |
| 9 | +---------- |
| 10 | + |
| 11 | +### ILogger nima? |
| 12 | + |
| 13 | +**ILogger — Microsoft.Extensions.Logging** dan keladigan interface. U bizga **.NET’da** oson yo’l bilan log qilishimizga imkon beradi. **Dependency Injection (DI)** orqali biz ILogger’ni ishlatmoqchi bo’lgan Class’imizga Inject ya’ni ichiga kirg’izamiz: |
| 14 | + |
| 15 | +``` |
| 16 | +using Microsoft.Extensions.Logging |
| 17 | +
|
| 18 | +public class MyService(ILogger<MyService> logger) |
| 19 | +{ |
| 20 | + public void DoWork() |
| 21 | + { |
| 22 | + logger.LogInformation("Doing work at {Time}", DateTime.UtcNow); |
| 23 | + } |
| 24 | +} |
| 25 | +``` |
| 26 | +---------- |
| 27 | + |
| 28 | +### Logging levels (Qayd qilishning darajalari) |
| 29 | + |
| 30 | +_6 ta Log qilish darajasi (KETMA-KETLIKDA) bo’lib ular quyidagilar:_ |
| 31 | + |
| 32 | +- **Trace** |
| 33 | +- **Debug** |
| 34 | +- **Information** |
| 35 | +- **Warning** |
| 36 | +- **Error** |
| 37 | +- **Critical** |
| 38 | + |
| 39 | +---------- |
| 40 | + |
| 41 | +### Trace |
| 42 | + |
| 43 | +**_Детальный_** ma’lumotlarni qayd qilish uchun. Odatda **debug** qilinayotganda yoki software qurilayotganda ishlatilinadi. Masalan har bir funksiya ishga tushganda uni ishga tushganini va nima parameter’lar bilan ishga tushganini qayd qilish: |
| 44 | + |
| 45 | +``` |
| 46 | +logger.LogTrace("ProcessData metodi ishga tushyapti. Parameterlari: {Parameter1}, {Parameter2}", param1, param2); |
| 47 | +``` |
| 48 | +---------- |
| 49 | + |
| 50 | +### Debug |
| 51 | + |
| 52 | +**Log** qilishning bu darajasiham **Trace’ga** o’xshab ketadi ya’ni biroz kamroq **_детальный_** ma’lumotlar bo’ladi ammo buniham **debug** va dastur ishlab chiqarilayotganda ishlatilinadi. |
| 53 | +``` |
| 54 | +logger.LogDebug("{Username} uchun user authentication boshlandi.", username); |
| 55 | +``` |
| 56 | +---------- |
| 57 | + |
| 58 | +### Information |
| 59 | + |
| 60 | +**Information** darajasi bo’lsa **Trace** va **Debug’dan** farqli o’laroq, umumiy ishlar natijasi uchun ishlatsak bo’ladi. Ya’ni **детальный**-**детальный** ma’lumotlarni chiqarmasdan, umumiy masalan biror-bir ish bajarilib bo’lgandan so’ng ish yakunlanganini qayd qilib qo’yish uchun ishlatsak maqsadga muvofiq bo’ladi. |
| 61 | +``` |
| 62 | +logger.LogInformation("{UserId} miqdordagi to'lov {Amount} uchun muvaffaqiyatli to'landi.", userId, amount); |
| 63 | +``` |
| 64 | +---------- |
| 65 | + |
| 66 | +### Warning |
| 67 | + |
| 68 | +**Warning** — qachonki kutilmagan voqea sodir bo’lsa, ogohlantirish ya’ni **warning** darajasini ishlatsak bo’ladi. Masalan xotirada joy kam qolganini: |
| 69 | +``` |
| 70 | +logger.LogWarning("{ServerId} mana shu server'da joy kam qolyabdi. Faqatgina {FreeSpace} GB joy qoldi!", serverId, freeSpace); |
| 71 | +``` |
| 72 | +---------- |
| 73 | + |
| 74 | +### Error |
| 75 | + |
| 76 | +**Error** — biror bir jiddiy voqea sodir bo’lsa-yu lekin dastur o’zini o’zi tiklay olib dastur ishlashdan to’xtamasa ishlatsak bo’ladi. Bu dasturni to’xtatmaydigan ammo e’tibor berishimiz majbur bo’ladigan voqea uchun ishlatilinadi. |
| 77 | +``` |
| 78 | +logger.LogError(ex, "{UserId} uchun to'lov amalga oshirilayotganda muammoga duch kelindi. Exception: {ExceptionMessage}", userId, ex.Message); |
| 79 | +``` |
| 80 | +---------- |
| 81 | + |
| 82 | +### Critical |
| 83 | + |
| 84 | +**Bu qayd qilishning eng cho’qqisidagi daraja bo’lib, serverda xatolik yuz bersa, dastur ishdan chiqib ketsa (poyezd relsdan chiqib ketsa) va dastur qayta ishga tushirilishini talab qilsa ushanda ishlatilinadi.** |
| 85 | +``` |
| 86 | +logger.LogCritical("Dastur ishga tushmadi. Configuration fayl topilmadi."); |
| 87 | +``` |
| 88 | +---------- |
| 89 | + |
| 90 | +## Qayd qilishni sozlash |
| 91 | + |
| 92 | +Biz qanday hohlasak shunday **Log** (qayd) qilish imkoniyatlari bor, masalan faqatgina ma’lum bir **Log Level’lar** qaydnomaga yoziladi. Va buni mana bunday amalga oshiramiz: |
| 93 | + |
| 94 | +**Program.cs'da:** |
| 95 | +``` |
| 96 | +builder.Logging.SetMinimumLevel(LogLevel.Warning); // Faqatgina Warning va undan baland bo'lgan qaydlar |
| 97 | +``` |
| 98 | + |
| 99 | +Bu yerda biz **SetMinimumLevel** ni ichiga qaysi **Log Level’dan** yuqori bo’lgan qayd qilinishlarni beramiz. Agarda **Warning** bersak undan yuqorilaridagilar chiqadi, **Trace** bersak barchasi chiqadi chunki **Trace** birinchi darajali qayd qilish hisoblanadi. |
| 100 | + |
| 101 | +---------- |
| 102 | + |
| 103 | +## Diqqat! |
| 104 | + |
| 105 | +E’tibor bergan bo’lsangiz log qilayotganimda **string interpolation’ga** o’xshab ketadigan **sytnax** ishlatdim ammo boshida **$** mana bu belgi yo’q. O’ylagandursiz xato qilgan bo’lsa keraak deb, ammo hech ham unday emas. |
| 106 | + |
| 107 | +Bunday formatda o’zgaruvchilarni qayd qilib ketsak keyin masalan **Azure’da** shunday xizmatlar borki ular bilan mana shu **{}** ni ichidagi nom bilan **filter** qilib osonlikcha topib olsak bo’ladi. Agarda **$** bu belgi bilan **string interpolation** qiladigan bo’lsak, unday qilib **filterlay** olmaymiz. |
| 108 | + |
| 109 | +---------- |
| 110 | + |
| 111 | +## Diqqat #2 |
| 112 | + |
| 113 | +1. **_Hamma narsani Information yoki Error qilib Log (qayd) qilavermang! Aniq-tiniq hamma narsani joyida ishlating!_** |
| 114 | +2. **_Hech qachon parollar, bank kartasi raqamlari, yoki shaxsiy ma’lumotlarni qayd qilmang!_** |
| 115 | +3. **_String interpolation o’rniga placeholder {} larni ishlating!_** |
| 116 | + |
| 117 | +---------- |
| 118 | + |
| 119 | +### Shu Log (qayd) qilishlarni yaxshilab o’rganib olsak, anchagina debug-friendly (debug qilishga oson bo’lgan) dasturlarni qura olamiz. |
| 120 | + |
| 121 | +---------- |
| 122 | + |
| 123 | +**_Xurmat bilan,_** |
| 124 | + |
| 125 | +**_Muhammad Xodjayev._** |
0 commit comments