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).

Log qeydi necə hərəkət edir
Log qeydi necə hərəkət edir
BlokRolu
LoggerÇağırdığınız obyekt; adı getLogger(__name__)
HandlerQeyd hara gedir: konsol, fayl, e-poçt, kollektor
FormatterNecə görünür: mətn və ya JSON
FilterQeydləri süzür və ya request_id kimi sahə əlavə edir

Kodda logging

python
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ış:

text
INFO shop.orders order 42 created
WARNING shop.orders stock low: 3 left

DEBUG 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
DEBUGTəfərrüat, yalnız inkişafda
INFONormal hadisələr: sifariş yaradıldı
WARNINGGözlənilməz, amma işləyir
ERRORƏməliyyat alınmadı
CRITICALSistem işləmir
python
# 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