Propagación de registro de Python

Mehvish Ashiq 21 junio 2023
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.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Artículo relacionado - Python Logging