Propagación de registro de Python
Este tutorial demuestra el uso de LevelFilter
para mostrar cómo registrar mensajes de un nombre de registrador particular de un nivel particular y superior (por ejemplo, INFO
y superior) a un controlador de registro específico.
Propagación de registro de Python
Ya hemos escrito un artículo hablando sobre el módulo de registro
, su importancia, varios niveles de registro y demostramos el uso local y global del módulo de registro
. Aquí, aprenderemos cómo podemos propagar mensajes específicos del nivel por debajo del nivel actual del registrador.
¿Qué significa eso? Significa que queremos registrar mensajes de un nombre de registrador particular, de un nivel específico y superior (digamos INFO
y superior) a un controlador de registro particular (supongamos un controlador de flujo o un controlador de archivos).
Código de ejemplo:
import logging
class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno >= self.level
def perform_logging(turn):
logger = logging.getLogger("extra")
logger.info("some information turn %d" % turn)
logger.debug("this is the debug fudge turn %d" % turn)
rootLogger = logging.getLogger()
handler = logging.StreamHandler()
rootFormatter = logging.Formatter("root - %(levelname)s: %(msg)s")
handler.setFormatter(rootFormatter)
rootLogger.addHandler(handler)
rootLogger.setLevel(logging.DEBUG)
perform_logging(1)
extraLogger = logging.getLogger("extra")
extraHandler = logging.StreamHandler()
extraFormatter = logging.Formatter("extra - %(levelname)s: %(msg)s")
extraHandler.setFormatter(extraFormatter)
extraLogger.addHandler(extraHandler)
extraHandler.addFilter(LevelFilter(logging.INFO))
extraLogger.setLevel(logging.DEBUG)
perform_logging(2)
Producción :
root - INFO: some information turn 1
root - DEBUG: this is the debug fudge turn 1
extra - INFO: some information turn 2
root - INFO: some information turn 2
root - DEBUG: this is the debug fudge turn 2
En este ejemplo, creamos dos registradores: un registrador raíz
y un registrador con nombre (que es extra
aquí).
Adjuntamos el logging.StreamHandler
para un registrador root
y establecemos el nivel de registro en logging.DEBUG
. Luego, adjuntamos un controlador a un registrador con nombre y establecemos su nivel de registro en logging.INFO
.
Ahora el punto es cómo propagamos mensajes de un nivel específico por debajo del nivel actual. Para hacer eso, usamos LevelFilter
para agregar un filtro a cada controlador que permita solo el nivel particular.