¿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.
davy.ai
Para evitar el registro de todos los registros desde el ámbito de una función, puedes utilizar el siguiente código:
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
.