Ho il seguente codice in esecuzione su ogni richiesta di un WSGI (web2py) applicazione:Sostituire gestore predefinito di Python logger
import logging, logging.handlers
from logging import StreamHandler, Formatter
def get_configured_logger(name):
logger = logging.getLogger(name)
if (len(logger.handlers) == 0):
# This logger has no handlers, so we can assume it hasn't yet been configured (Django uses similiar trick)
# === Configure logger ===
# Create Formatted StreamHandler:
FORMAT = "%(process)s %(thread)s: %(message)s"
formatter = logging.Formatter(fmt=FORMAT)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.debug('CONFIGURING LOGGER')
return logger
# Get app specific logger:
logger = get_configured_logger(request.application)
logger.debug("TEST")
E 'pensata per configurare il logger una volta, con il gestore formattato che voglio. Funziona, tranne che sto ricevendo doppie voci nella mia stdout:
81893 4329050112: CONFIGURING LOGGER
DEBUG:dummy:CONFIGURING LOGGER
81893 4329050112: TEST
DEBUG:dummy:TEST
Come posso utilizzare il mio nuovo gestore formattato e sbarazzarsi di/nascondere quello di default?
Non ho mai usato questa classe prima, ma non pensate che logger.setLevel (logging.DEBUG) e logger.debug sia una sorta di ridondante? – MiJyn
lkjoel- No, sono due cose diverse. chiamare '.debug (..)' crea voci di registro a livello di debug, mentre l'impostazione del livello di registrazione dice al gestore di * gestire * le voci di registro a quel livello. – Yarin
Stai chiamando 'logging.basicConfig' ovunque? Se è così, commentalo. – unutbu