2013-07-19 10 views
5

Voglio solo essere in grado di sovrascrivere il livello di log della console nel file delle impostazioni. Ho letto il django logging document, ma ho difficoltà a fare il logging per fare quello che voglio. La documentazione mi assicura che:modo conciso per cambiare il livello log console django

"Da Django 1.5 avanti, la configurazione di registrazione del progetto è unita ai valori predefiniti di Django, quindi è possibile decidere se si desidera aggiungere o sostituire la configurazione esistente. Per sovrascrivere completamente la configurazione predefinita, imposta la chiave disable_existing_loggers su True nel dictConfig LOGGING. In alternativa puoi ridefinire alcuni o tutti i logger. "

Così ho provato semplicemente aggiungendo il seguente al mio settings.py:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'handlers': { 
     'console':{ 
      'level': 'DEBUG', 
     }, 
    }, 
} 

... ma ottengo un'eccezione:

<snip> 
    File "/usr/lib/python2.7/logging/config.py", line 575, in configure 
    '%r: %s' % (name, e)) 
ValueError: Unable to configure handler 'console': 'NoneType' object has no attribute 'split' 

Mi sembra giusto. Sembra voler l'intero blocco di configurazione. Così ho provato quello che ho pensato che sarebbe la più semplice configurazione console logger:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': True, 
    'formatters': { 
     'simple': { 
      'format': '%(levelname)s %(message)s' 
     }, 
    }, 
    'handlers': { 
     'console':{ 
      'level': 'INFO', 
      'class': 'logging.StreamHandler', 
      'formatter': 'simple' 
     }, 
    }, 
    'loggers': { 
     'default': { 
      'handlers': ['console'], 
      'level': 'INFO', 
      'filters': [] 
     } 
    } 
} 

La mia intenzione è quella di impostare il livello di log INFO, ma ho ancora vedere un gruppo di messaggi di debug, e il MYFORMATTER stringa non lo fa apparire in nessuno di essi comunque.

Infine, con ottimismo cieco, ho tentato questo:

from django.utils.log import DEFAULT_LOGGING 
DEFAULT_LOGGING['handlers']['console']['level'] = 'INFO' 

Devo mancare qualcosa di molto evidente qui.

BTW, sto usando Django 1.5.1.

+0

Potresti essere interessato a [sentry] (https://github.com/getsentry/sentry). –

risposta

3

Rispondendo alla mia domanda proprio qui, ho finito per andare con il seguente nel file settings.py:

import logging 

logging.basicConfig(
    level = logging.INFO, 
    format = " %(levelname)s %(name)s: %(message)s", 
) 
0

Si può fare questo per impostare il livello di registrazione django:

import logging 
logging.disable(logging.INFO) 

logging.disable (lvl)

Fornisce un lvl livello prioritario per tutti i logger che ha la precedenza sulla logger del proprio livello. Quando si presenta la necessità di temporizzare l'uscita di registrazione su tutta l'applicazione, questa funzione può essere utile. Il suo effetto è di disabilitare tutte le chiamate di severity lvl e di seguito, in modo che se si chiama con un valore di INFO, quindi tutti gli eventi INFO e DEBUG verrebbero eliminati, mentre quelli di severità AVVISO e superiori verranno elaborati in base a a il livello effettivo del logger. Per annullare l'effetto di una chiamata a logging.disable (lvl), chiamare logging.disable (logging.NOTSET).

http://docs.python.org/2/library/logging.html#logging.disable

+0

Hmm.Ma questo non funziona se i logger sottostanti sono configurati per la stampa, ad esempio, INFO e voglio vedere i messaggi DEBUG sulla console. – user2076663

+0

ok, hai detto il contrario nella tua domanda;) – maazza

0

ho avuto un problema- simile mi mancava una "classe "da uno dei miei gestori.

Problemi correlati