Recentemente sono stato assegnato a un nuovo progetto perché sono uno degli unici sviluppatori della mia azienda che ha utilizzato Python ampiamente in passato. Il mio primo compito era quello di ripulire il codice base e renderlo più Pythonic - mentre così facendo mi sono imbattuto in questo:
import logging # The builtin logging module
def logInfo(message):
logger = logging.getLogger('')
logger.info(message)
def logError():
logger = logging.getLogger('')
logger.error('Failed: {0}'.format(traceback.format_exc()))
def logCritical(message):
logger = logging.getLogger('')
logger.critical(message)
def logWarning(message):
logger = logging.getLogger('')
logger.warn(message)
def logDebug(message):
logger = logging.getLogger('')
logger.debug(message)
Questo mi fa un po 'male - sembra che una soluzione molto più pulita sarebbe semplicemente creare un oggetto logger globale nella parte superiore del file, e quindi usare solo le normali funzioni logger.debug|info|error|warn|critical
. Sto pensando troppo a questo?
Ovviamente, c'è tutta la pelosità di un oggetto globale - nel qual caso forse farei qualcosa di simile
@memoize
def getLogger(name='__main__'):
return logging.getLogger(name)
Con una funzione di memoizzazione appropriata.
Questo è un progetto piuttosto giovane, quindi abbiamo molta libertà nel modo in cui lo impostiamo.