2015-06-23 7:41 GMT+01:00 Simone Federici <s.feder...@gmail.com>: > altro suggerento per loggare elementi costosi a livello computazionale > tipo json.dumps() รจ wrapparli con isEnabledFor > > if logger.isEnabledFor(logging.DEBUG): > logger.debug('dump: %s', json.dumps()) >
Un'altra possibilita' in questi casi (che a me piace di piu') ma che ha un minimo costo (di sviluppo) ma lascia il codice piu' pulito e mantiene l'efficienza a livello di codice marginalmente migliore e' introdurre dei proxy. Ovvero qualcosa come: class JSONDumper(object): def __init__(self, obj): self.obj = obj def __str__(self): return json.dumps(self.obj) e poi semplicemente: logger.debug('dump: %s', JSONDumper(something)) Di fatto debug/info e compagnia hanno gia' dentro la logica per costruire la stringa dai placeholder se e solo se la stringa viene attualmente stampata su qualcosa (quindi il livello di logging e' giusto etc etc etc). Un oggetto come quello che ho scritto di fatto si appoggia a questa logica. Di fatto, puoi immaginare che logger.debug dentro abbia gia' un controllo come logger.isEnabledFor(logging.DEBUG) e quindi, in pratica, lo staresti chiamando due volte. Teoricamente hai anche potenzialmente il caso in cui il logging level cambi fra le due chiamate, per quanto raro. Dopo di che, ci sono una serie di casi in cui fare un proxy tipo quello la sopra e' un overkill e la soluzione che suggerisci funziona bene per tutti gli scopi pratici. -- . ..: -enrico-
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python