2013-06-01 12 views
11

Varsayılan olarak, tümünü yakalayacak olan "" kayıt cihazı oluşturarak SETTINGS yapılandırmasında settings.py dosyasında oturum açmayı etkinleştirebilirim. Ancak, yalnızca projemdeki uygulamalardan Django internals'ın aksine giriş yapmak istiyorsam ne yapmalıyım?Django sadece uygulamalarım için oturum açıyor

Django uygulama modüllerinin her birinde açık bir şekilde bir kayıt almayı ve bunu bazı kurallara göre isimlendirmeyi hayal edebiliyorum. logging.getLogger("myproject." + __file__). Daha sonra, tüm bunları çıktı almak için alan olan 'myproject' (SETTINGS'de) adlı bir kaydedici oluşturabilirim. Proje ismimi kodlamamayı tercih ederim, bu yüzden herhangi bir rasgele derinlikte dosyaya kadar tüm isim alanını ayıklamak için ___file___ os.path mantığını yaparım.

Bu noktada, durup merak etmenin daha kolay bir yolu var mı?

+1

Öncelikle yerel uygulamalar dışarı bölmek Kayıt belgelerini okudunuz mu (https://docs.djangoproject.com/en/dev/topics/logging/#configuring-logging)? Aradığın şeye benzeyen bir "myproject.custom" logger var. –

+0

Evet yaptım. Anlattığım şeyi basitleştirecek bir şey görmedim, ama eğer yaparsa bu büyük bir cevap olurdu. –

+1

Yorumumu gönderdikten sonra sorunuzu yeniden okudum ve muhtemelen herhangi bir ek bilgi sunamayacağını anladım. Bunun için özür dilerim. –

cevap

9

Sorunuzu tam olarak anladığımdan emin değilim çünkü yanıt çok basit görünüyor.

'handlers': { 
    'handler_for_my_apps': { 
     'level': 'DEBUG', 
     'class': 'logging.FileHandler', 
     'filename': 'debug.log', 
    }, 

ve app1 uygulamalarınız verilen app2 ve öyleyse, olmadan bu uygulamalardan alınan tüm günlükleri olabilir:

böyle örneğin LOGGING projenizin uygulamalar için bir işleyici tanımladığınız varsayarsak günlükçüleri tanımlayarak herhangi Django'nın iç günlükleri:

'loggers': { 
    'app1': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 
    'app2': { 
     'handlers': ['handler_for_my_apps'], 
     'level': 'DEBUG', 
    }, 

bir han ile django adında bir logger tanımlanan sürece tabii, aynı dosyada hiçbir Django günlükleri olacak dren handler_for_my_apps.

Uygulamalarınızda, dokümanlar tarafından önerilen şekilde logging.getLogger(__name__) kullanarak kaydediciyi alabilirsiniz. El ile günlük yapılandırmasına hepsini eklemek zorunda kalmadan yerel uygulamalar tümü için aynı kaydediciler oluşturmak için aşağıdaki gibi bir şema kullanabilirsiniz

6

Sorunuzu yanlış sürece

....

LOCAL_APPS = [ 
    'myapp1', 
    'myapp2', 
    ... 
] 

THIRD_PARTY_APPS = [ 
    'django. ...', 
    ... 
] 

INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS 

Sonraki yerel uygulamalar için logger yapılandırma oluşturmak:

local_logger_conf = { 
    'handlers': ['my_handler',], 
    'level': 'DEBUG', 
} 

Son olarak, kaydediciler tanımlamak aşağıdaki gibi:

'loggers': { app: copy.deepcopy(local_logger_conf) for app in LOCAL_APPS } 
İlgili konular