Ho posto questa domanda per python 2 here, ma ho riscontrato nuovamente il problema quando la risposta non funzionava più per Python 3.2.3.Modifica del formato del messaggio di registrazione in base al livello di registrazione dei messaggi in Python3
Ecco il codice che funziona su Python 2.7.3:
import logging
# Attempt to set up a Python3 logger than will print custom messages
# based on each message's logging level.
# The technique recommended for Python2 does not appear to work for
# Python3
class CustomConsoleFormatter(logging.Formatter):
"""
Modify the way DEBUG messages are displayed.
"""
def __init__(self, fmt="%(levelno)d: %(msg)s"):
logging.Formatter.__init__(self, fmt=fmt)
def format(self, record):
# Remember the original format
format_orig = self._fmt
if record.levelno == logging.DEBUG:
self._fmt = "DEBUG: %(msg)s"
# Call the original formatter to do the grunt work
result = logging.Formatter.format(self, record)
# Restore the original format
self._fmt = format_orig
return result
# Set up a logger
my_logger = logging.getLogger("my_custom_logger")
my_logger.setLevel(logging.DEBUG)
my_formatter = CustomConsoleFormatter()
console_handler = logging.StreamHandler()
console_handler.setFormatter(my_formatter)
my_logger.addHandler(console_handler)
my_logger.debug("This is a DEBUG-level message")
my_logger.info("This is an INFO-level message")
Una corsa con Python 2.7.3:
tcsh-16: python demo_python_2.7.3.py
DEBUG: This is a DEBUG-level message
20: This is an INFO-level message
Per quanto posso dire, la conversione a Python3 richiede solo una leggera mod a CustomConsoleFormatter. init():
def __init__(self):
super().__init__(fmt="%(levelno)d: %(msg)s", datefmt=None, style='%')
su Python 3.2.3:
tcsh-26: python3 demo_python_3.2.3.py
10: This is a DEBUG-level message
20: This is an INFO-level message
Come si può vedere, il mio desiderio di sostituire il '10' con 'DEBUG' si sta contrastato.
Ho provato a scavare nel codice sorgente Python3 e sembra che l'istanza di PercentStyle stia clobberando self._fmt dopo che io, beh, lo cloberò da solo.
Le mie costolette di registrazione si fermano poco prima di essere in grado di aggirare questa ruga.
Qualcuno può consigliare un altro modo o forse sottolineare quello che sto trascurando?