Mi piace davvero così tanto, ecco il tuo esempio funzionante! Seriamente questo è fantastico!
Inizia inserendo questo nel tuo file 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',
},
}
}
Ora cosa significa tutto questo?
- Formattatori Mi piace che abbiano lo stesso stile di ./manage.py runserver
- Gestori: voglio due log: un file di testo di debug e una console delle informazioni. Questo mi permette di scavare davvero (se necessario) e guardare un file di testo per vedere cosa succede sotto il cofano.
- Logger - Qui è dove fissiamo ciò che vogliamo registrare. In generale django ottiene WARN e soprattutto - l'eccezione (quindi propagazione) sono i backend in cui mi piace vedere le chiamate SQL poiché possono impazzire .. L'ultima è la mia app dove ho due gestori e spingo tutto ad esso.
Ora come abilito MYAPP per usarlo ...
Secondo la documentazione, mettilo all'inizio dei tuoi file (views.py) ..
import logging
log = logging.getLogger(__name__)
Quindi per ottenere qualcosa fallo.
log.debug("Hey there it works!!")
log.info("Hey there it works!!")
log.warn("Hey there it works!!")
log.error("Hey there it works!!")
I livelli di log sono spiegati qui e per Python puro qui .