es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Puede una función envoltorio/decoradora en Python desactivar todos los registros en el código que envuelve?

Quiero decorar/envolver una función y evitar que se registren todos los logs desde el ámbito de esa función.

def prevent_logs_wrapper(func):
    ...
    ...
    ...

@prevent_logs_wrapper
def some_logs():
    logger.info('Log an info msg')
    logger.warning('Log a warning msg')

y en lugar de esta salida

[INFO] Log an info msg
[WARNING] Log a warning msg

no obtendremos ningún log.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para evitar el registro de todos los registros desde el ámbito de una función, puedes utilizar el siguiente código:

    import logging
    
    def prevent_logs_wrapper(func):
        def wrapper():
            # Deshabilitar el registro
            logging.disable(logging.CRITICAL)
            # Llamar a la función original
            func()
            # Volver a habilitar el registro
            logging.disable(logging.NOTSET)
        return wrapper
    
    @prevent_logs_wrapper
    def some_logs():
        logger = logging.getLogger()
        logger.info('Registrar un mensaje de información')
        logger.warning('Registrar un mensaje de advertencia')
    

    La función prevent_logs_wrapper toma una función como argumento y devuelve una nueva función que envuelve a la original. La nueva función deshabilita el registro, llama a la función original y luego vuelve a habilitar el registro. De esta manera, no se crean registros durante la ejecución de la función original.

    En el ejemplo anterior, añadimos la variable logger dentro de la función wrapper, para asignarla al contexto del registro. Luego usamos la variable logger dentro de la función some_logs después del decorador @prevent_logs_wrapper. Esto se debe a que desactivamos y volvemos a activar el registro dentro de la función decoradora, evitando el registro adecuado.

    Ten en cuenta que este código asume que el registro ya ha sido configurado correctamente en otra parte del código. Si no es así, es posible que debas configurar manualmente la configuración del registro antes de llamar a la función prevent_logs_wrapper.

Comments are closed.