<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2015-06-23 7:41 GMT+01:00 Simone Federici <span dir="ltr"><<a href="mailto:s.federici@gmail.com" target="_blank">s.federici@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div>altro suggerento per loggare elementi costosi a livello computazionale tipo json.dumps() è wrapparli con <span></span><font size="2"><span style="background-color:rgba(255,255,255,0)">isEnabledFor</span></font></div><div><br></div><div><span style="background-color:rgba(255,255,255,0)"><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">i<font size="2"><span>f</span></font></span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline"> logger</span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">.</span></span><font size="2"><span style="background-color:rgba(255,255,255,0)">isEnabledFor</span></font><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">(</span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">logging</span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">.</span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">DEBUG</span><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">):</span></div></div><div><span style="background-color:rgba(255,255,255,0)"><span style="font-size:small;font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">    logger.debug('dump: %s', json.dumps())</span></span></div></blockquote></div><br>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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Ovvero qualcosa come:</div><div class="gmail_extra"><br></div><div class="gmail_extra">class JSONDumper(object):</div><div class="gmail_extra">    def __init__(self, obj):</div><div class="gmail_extra">        self.obj = obj</div><div class="gmail_extra"><br></div><div class="gmail_extra">    def __str__(self):</div><div class="gmail_extra">        return json.dumps(self.obj)</div><div class="gmail_extra"><br></div><div class="gmail_extra">e poi semplicemente:</div><div class="gmail_extra"><br></div><div class="gmail_extra">logger.debug('dump: %s', JSONDumper(something))</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Di fatto, puoi immaginare che logger.debug dentro abbia gia' un controllo come l<span style="background-color:rgba(255,255,255,0)"><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">ogger</span><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">.</span></span><font size="2"><span style="background-color:rgba(255,255,255,0)">isEnabledFor</span></font><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">(</span><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">logging</span><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">.</span><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">DEBUG</span><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">) 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.</span></div><div class="gmail_extra"><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline"><br></span></div><div class="gmail_extra"><span style="font-style:inherit;font-variant:inherit;margin:0px;padding:0px;border:0px;vertical-align:baseline">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.</span></div><div class="gmail_extra"><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>