Skip to content

Commit c8c7c64

Browse files
authored
Update logging.md
1 parent c1a7eac commit c8c7c64

File tree

1 file changed

+123
-0
lines changed
  • c-.net/web-development/asp.net-core-web-api

1 file changed

+123
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,125 @@
1+
---
2+
description: Muhammad Xodjayev
3+
---
4+
15
# Logging
26

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

Comments
 (0)