2010-04-10 10 views
37

Görüntü işlevinde farklı noktalarda django uygulamasında hata ayıklama iletileri çıktı almak istiyorum. django-debug-toolbar dokümanı, python günlüğünde oluşturmayı kullandığını söylüyor ancak daha fazla bilgi bulamıyorum. Gerçekten bir dosyaya değil, araç çubuğundaki bilgi bölmesine giriş yapmak istemiyorum. Bu nasıl çalışıyor?Django Debug Toolbar'da Logging'i nasıl kullanırım?

cevap

43

Yalnızca logging module yöntemlerini kullanıyorsunuz ve DjDT bunları kaydetme Günlüğü Panelinde durduracak ve görüntüleyecektir.

import logging 

logging.debug('Debug Message') 

if some_error: 
    logging.error('Error Message') 
8

@ jonwd7 belirtildiği gibi, kök loggera düz açılıyor, genellikle tavsiye edilmez. Genellikle bu desen takip ediyorum: Bu veriyor

import logging 
logger = logging.getLogger(__name__) 
del logging # To prevent accidentally using it 

... 

logger.debug("Some message") 

Eğer çok ince günlüğü mesajlar ve görünmüyor hangi kontrolünü taneli olması. Ne yazık ki, bu şekilde kullanıldığında, belirli bir günlüğe kaydetme yapılandırmasını belirtmediğiniz sürece django hata ayıklama araç çubuğunu herhangi bir günlük iletisini yakalama işlemini durdurur. İşte ile gelebilir en basit biri: Eğer işleyici kök günlükçüsüne bağlı araç çubuğu devre dışı bırakılması; yani "artan" ve "disable_existing_loggers" Ayarı

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'incremental': True, 
    'root': { 
     'level': 'DEBUG', 
    }, 
} 

her ikisi de önemlidir. Tek yapmak istediğin, kök kaydedicinin "Google" olarak ayarlandı. Ayrıca, belirli kaydediciler için seviyeleri ayarlamak için "kaydediciler" girişini de kullanabilirsiniz. "İşleyicileri" bölümünü atlayın ve "yayma" seçeneğini ayarlayın: Doğru, böylece DjDT işleyicisi tarafından yakalanır.

+1

Kök kaydedici ile detaylara girdiğiniz için teşekkür ederiz. Diğer cevapların eksik olduğu bilgisidir. – jnns

+1

ayar kısmı bana yardımcı oldu, teşekkürler! 2016'da hala iyi tavsiyeler – Jeff

0

Mevcut bir LOGGING yapılandırma dict'iniz varsa ve 'incremental' (geçiş) 'e geçerek dağınıklık yapmak istemiyorsanız, DjDT günlüğünü bir işleyici olarak yeniden eklemeniz, sonra da bunu eklemeniz gerekir. kök günlüğü işleyicileri listesi.

from debug_toolbar.panels.logging import collector # needed for handler constructor below 
LOGGING = { 
    # existing options, formatters, loggers, etc 
    handlers = { 
     # existing handlers 
     'djdt_log': { 
      'level': 'DEBUG', 
      'class': 'debug_toolbar.panels.logging.ThreadTrackingHandler', 
      'collector': collector, 
     }, 
    }, 
    'root': { 
     'level': 'DEBUG', 
     'handlers': ['djdt_log'], 
    }, 
} 

Bunu yapmanın daha temiz bir yolu varsa, onu görmek isterim.