Django 1.3+ için Dosyaya Basit Günlük örneği


100

Sürüm notları şunları söylüyor:

Django 1.3, Python'un günlük kaydı modülü için çerçeve düzeyinde destek ekler.

Bu iyi. Bundan yararlanmak isterim. Maalesef dokümantasyon , bunun ne kadar basit ve değerli olduğunu gösteren eksiksiz bir çalışma örnek kodu biçiminde gümüş tepside bana hepsini vermiyor.

Koduma ekleyebileceğim bu ilginç yeni özelliği nasıl kurarım?

logging.debug('really awesome stuff dude: %s' % somevar)

ve "/tmp/application.log" dosyasına bakın.

18:31:59 Apr 21 2011 awesome stuff dude: foobar
18:32:00 Apr 21 2011 awesome stuff dude: foobar
18:32:01 Apr 21 2011 awesome stuff dude: foobar

Varsayılan Python günlüğü ile bu 'çerçeve düzeyinde destek' arasındaki fark nedir?

Yanıtlar:


187

Bunu gerçekten çok seviyorum, işte çalışma örneğiniz! Cidden bu harika!

Bunu, settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': SITE_ROOT + "/logfile",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'MYAPP': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    }
}

Şimdi tüm bunlar ne anlama geliyor?

  1. Biçimlendiriciler ./manage.py runserver ile aynı stilde çıkmasını seviyorum
  2. İşleyiciler - İki günlük istiyorum - bir hata ayıklama metin dosyası ve bir bilgi konsolu. Bu, gerçekten kazmama (gerekirse) ve başlık altında ne olduğunu görmek için bir metin dosyasına bakmamı sağlıyor.
  3. Kaydediciler - İşte kaydetmek istediğimiz şeyi bulduğumuz yer. Genel olarak django WARN ve üstü alır - istisna (bu nedenle yayılır), SQL çağrılarını görmeyi sevdiğim arka uçlardır çünkü delirebilirler. Son olarak, uygulamam iki işleyicim vardı ve her şeyi ona itti.

Şimdi MYAPP'yi kullanması için nasıl etkinleştirebilirim ...

Başına belgelere dosyalarınızı (views.py) üstündeki bu koymak ..

import logging
log = logging.getLogger(__name__)

Sonra bir şeyler çıkarmak için bunu yapın.

log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")

Günlük seviyeleri burada açıklanmıştır ve saf python için burada .


7
yukarıdaki adımları takip ettim. dosya oluşturulur ancak üzerine hiçbir şey yazılmaz. lütfen yardım
Vivek S

12
@InternalServerError, kaydediciler bölümünde MYAPP'yi uygulamanızın adıyla değiştirmeniz gerekir.
Rog

9
Emin ol! 'MYAPP' yerine ''
rh0dium

10
Açıklık getirmek gerekirse, logger'ı ne olarak adlandırırsanız adlandırın settings.py, yani MYAPPbu örnekte, çağrıdaki parametre de vardır logging.getLogger. Bu nedenle, projeniz birçok bağımsız uygulama içeriyorsa ve logging.getLogger('MYAPP')bunun yerine ortak bir kaydedici kullanmalarını istiyorsanızlogging.getLogger(__name__)
rhunwicks

3
Bu harika çalışıyor. 'Class': 'logging.NullHandler' kullanmak zorunda kaldım çünkü 'django.utils.log.NullHandler' artık geçerli değil, ancak geri kalanı benim için 1.11'de çalıştı
JacquelineIO

4

Kısmen rh0dium tarafından önerilen günlüğe kaydetme yapılandırmasına ve kendim de yaptığım biraz daha araştırmaya dayanarak , güzel günlüğe kaydetme varsayılanlarına sahip örnek bir Django projesi oluşturmaya başladım - başarısız-güzel-django .

Örnek günlük dosyası çıktısı:

2016-04-05 22:12:32,984 [Thread-1    ] [INFO ] [djangoproject.logger]  This is a manually logged INFO string.
2016-04-05 22:12:32,984 [Thread-1    ] [DEBUG] [djangoproject.logger]  This is a manually logged DEBUG string.
2016-04-05 22:12:32,984 [Thread-1    ] [ERROR] [django.request      ]  Internal Server Error: /
Traceback (most recent call last):
  File "/Users/kermit/.virtualenvs/fail-nicely-django/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/kermit/.virtualenvs/fail-nicely-django/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/kermit/projekti/git/fail-nicely-django/djangoproject/brokenapp/views.py", line 12, in brokenview
    raise Exception('This is an exception raised in a view.')
Exception: This is an exception raised in a view.

Ayrıntılı kullanım README'de açıklanmıştır , ancak esasen logger modülünü Django projenize kopyalarsınız ve settings.pyfrom .logger import LOGGING altına eklersiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.