Funzione logger livello modulo

3

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.

    
posta Dannnno 17.07.2015 - 23:22
fonte

1 risposta

2

Un modo comune è, per definire un logger globale all'inizio del modulo con:

import logging
logger = logging.getLogger(__name__)

quindi è più facile assegnare diversi livelli di log a diversi moduli. Se non si dispone di un nome di registrazione distintivo, è possibile utilizzare direttamente le funzioni di registro di logging ; invece di logDebug scrivi semplicemente logging.debug .

    
risposta data 18.07.2015 - 17:45
fonte

Leggi altre domande sui tag