In alcune altre tecnologie abbiamo occasionalmente utilizzato un livello di registro inferiore a DEBUG che credo fosse chiamato "verbose". Mi rendo conto che la necessità di un tale livello è molto soggettiva. Ma nella mia mente "solo" avere INFO e DEBUG non è abbastanza. Abbiamo avuto momenti in cui era necessario registrare qualcosa di molto spammoso (più spammy del debug). In pratica producevamo build senza questa funzionalità ma in alcune occasioni avremmo abilitato questo livello di registrazione dopo che il prodotto era stato installato su alcune impostazioni del QA, mentre rintracciavamo un bug, ecc.Registrazione Python - C'è qualcosa sotto DEBUG?
C'è qualche modo (facile o meno) di registrare qualcosa al di sotto del livello DEBUG usando la libreria di logging standard di Python?
In un file temp.py posso effettuare le seguenti operazioni:
logging.addLevelName(5,"verbose")
VERBOSE = 5
logger = logging.getLogger("foo")
logger.setLevel(VERBOSE)
logger.log(VERBOSE,"blah!")
Questo funziona quando corro temp.py nel mio IDE (e tronchi allo stdout), ma i nostri veri demoni utilizzare il file/dizionario standard sintassi di configurazione per configurare la registrazione e non vedo alcun modo per indicare che il livello 5 dovrebbe essere usato per il demone.
Sto inseguendo qualcosa che non è realmente fattibile?
Per coloro che potrebbero chiedersi perché avrei bisogno di qualcosa di inferiore a DEBUG, è per il tipo occasionale di registrazione che potrebbe verificarsi molto frequentemente (forse un ciclo interno) che normalmente non vorrei vedere anche a DEBUG ma su alcuni sistemi di produzione potrebbe essere utile abilitarlo una volta ogni tanto senza aggiungere altro logging al codice sorgente e reimplementare, ecc.
EDIT1 - Chiaramente la libreria di registrazione consente livelli personalizzati. Dal momento che DEBUG è di livello 10, c'è spazio da qualche parte nella gamma 1..9. Se definisco un livello personalizzato (come nel codice di esempio sopra), suppongo che la mia vera domanda sia come abilitare quel livello di registrazione dal file di configurazione di json log?
EDIT2 - Il seguente funzionerebbe se non fosse per il fatto che abbiamo bisogno di file/uso di configurazione JSON (un requisito che non posso cambiare):
import logging
logging.basicConfig(filename='example.log',level=5)
VERBOSE = 5
logging.addLevelName(5,"verbose")
logger = logging.getLogger("bar")
logger.log(VERBOSE,"blah!")
Edit3 - figured it out ... La chiamata a
logging.addLevelName(5,"VERBOSE")
è fondamentale. Non l'avevo proprio nel posto giusto. Nel mio caso ho solo bisogno di effettuare la chiamata sopra si svolge prima la chiamata alla chiamata dictConfig (...) librerie di registrazione. Dopo averlo fatto, sono stato in grado di accedere al nostro file di configurazione del registro e di eseguire il bump down (sia sul gestore di file che su root) su VERBOSE e ha funzionato.
scontato, la dichiarazione di log in sé non è esattamente elegante, perché si chiama:
self.logger.log(VERBOSE,"Something very spammy")
piuttosto che
self.logger.verbose("Something very spammy")
Ma io davvero non voleva modificare qualsiasi codice della libreria logger (stato lì, fatto questo, prendi la maglietta).
Grazie a tutti!
E a chi pensa nulla inferiore è necessaria DEBUG, più potere a voi :)
"... utile per abilitare [...] una volta ogni tanto ..." suona esattamente * come 'DEBUG'. –
Sì, in parte si tratta di interpretazioni soggettive di ciò che DEBUG significa contro INFO, ecc. Non metterei mai un'istruzione DEBUG in un loop interno che potrebbe eseguire centinaia di volte. Ma nelle aziende passate ogni tanto mettevo una dichiarazione verbale "dettagliata" all'interno di un tale ciclo. Capisco il tuo punto però. –
ISTM la progettazione della registrazione è quella di effettuare chiamate di registrazione ovunque possano essere necessarie e quindi sopprimere un volume elevato con un filtro o un'impostazione di report una sola volta. –