[Python] Stop using print for debugging

Simone Federici s.federici a gmail.com
Mar 23 Giu 2015 21:51:03 CEST


Enrico franchi:

> logger.debug('dump: %s', JSONDumper(something))


yep, vuol dire scrivere però struttura OOP per il logging, non che ci sia
nulla di male.

non sarebbe male se invece si andasse in qualcosa tipo

logger.debug('dump: %s', (json.dumps, (self.obj),))
[non funziona]

dove cioè il modulo logging inglobasse la logica lazy ad esempio con la
classica tupla (f, *args, **kwargs) da passare come un parametro

oppure

logger.debug('dump: %s', lambda : json.dumps(self.obj))
[non funziona]

dove logging accetta callable methods come parametri


Enrico franchi:

> Poi in Java hanno elaborato su logging con librerie crescentemente piu'
> elaborate e comode e noi siamo rimasti indietro -- nel senso che non
> conosco librerie alternative che siano largamente usate.


Si ma grosso modo sono andati verso il multithread, implementazioni più
leggere, implementazioni disparate. L'utilizzo resta lo stesso a livello
sviluppatore, e dietro puoi scegliere varie implementazioni javiste.

Enrico Bianchi:

> Da quello che ho notato, dalla comparsa di log4j, tutte le librerie per il
> logging tendono ad imitarne il comportamento, anche la libreria di logging
> presente nella libreria standard di Java (con qualche modifica). Non ho mai
> capito il perche`, presumo semplicemente che sia legato alla diffusione di
> log4j frammista alla diffusione di Java...


Secondo me il problema di log4j è la licenza, per questo sono nate delle
specifiche molto simili... (non ho nulla contro la licenza apache2 - solo
che certe situazioni scappano da tutto ciò che è open)


Marco Beri:

> Concordo. Infatti io di solito se voglio leggere un dict e proprio mi
> serve averlo nel log, ci scrivo una roba così "\t".join("%s=%s" % (k, v)
> for k, v in data.items())


questo però è il classico esempio da mettere lazy o sotto logger.
isEnabledFor(logging.DEBUG)

tipo devi scrivere un lazy_join.

sarebbe fico poter scrivere

logger.debug('dump: %s', (lambda x:  "\t".join("%s=%s" % (k, v) for k, v in
x.items(), (data,)))
[non funziona]
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150623/830c3eeb/attachment-0001.html>


Maggiori informazioni sulla lista Python