Loglar istehsaldakı Django tətbiqinin nə etdiyini öyrənmək üçün yeganə yoldur. Bu dərsdə praktik sxem quracağıq: LOGGING lüğəti, id-li sorğu logları, struktur JSON və hər mühit üçün ayrıca konfiqurasiya.
print-dən logging-ə
print-də səviyyə, vaxt, mənbə və traceback yoxdur. Standart logging modulu səviyyələr, adlı loggerlər, bir neçə hədəf və format verir. Django özü də onunla yazır (django.request, django.db.backends).
| Blok | Rolu |
|---|---|
| Logger | Çağırdığınız obyekt; adı getLogger(__name__) |
| Handler | Qeyd hara gedir: konsol, fayl, e-poçt, kollektor |
| Formatter | Necə görünür: mətn və ya JSON |
| Filter | Qeydləri süzür və ya request_id kimi sahə əlavə edir |
Kodda logging
import logging
import sys
logging.basicConfig(
stream=sys.stdout,
level=logging.INFO,
format='%(levelname)s %(name)s %(message)s',
)
log = logging.getLogger('shop.orders')
log.debug('hidden')
log.info('order %s created', 42)
log.warning('stock low: %d left', 3)Çıxış:
INFO shop.orders order 42 created
WARNING shop.orders stock low: 3 leftDEBUG sətri düşür, çünki hədd INFO-dur. Qiymətləri f-string ilə yox, arqument (%s) kimi ötürün.
| Səviyyə | Nə vaxt |
|---|---|
| DEBUG | Təfərrüat, yalnız inkişafda |
| INFO | Normal hadisələr: sifariş yaradıldı |
| WARNING | Gözlənilməz, amma işləyir |
| ERROR | Əməliyyat alınmadı |
| CRITICAL | Sistem işləmir |
# shop/services.py
import logging
logger = logging.getLogger(__name__) # -> 'shop.services'
def pay(order_id):
logger.info('paying order %s', order_id)
try:
charge(order_id)
except TimeoutError:
logger.exception('payment gateway timeout, order %s', order_id)
raise