¿Cómo obtener un mensaje de la función de registro?
Tengo una función logger
del paquete logging
que después de llamarla, puedo enviar el mensaje a través de logging level
.
Me gustaría enviar este mensaje también a otra función, que es una función de Telegram llamada SendTelegramMsg()
.
¿Cómo puedo obtener el mensaje después de llamar a la función setup_logger
, enviar un mensaje a través de logger.info("Start")
por ejemplo, y luego enviar este mismo mensaje exactamente a la función SendTelegramMsg()
que está dentro de la función setup_logger
?
Mi función setup_logger
actualmente es la siguiente:
# Define el nivel de registro y el nombre del archivo
def setup_logger(telegram_integration=False):
"""Para configurar tantos registros como desee"""
nombre_archivo = os.path.join(os.path.sep, pathlib.Path(__file__).parent.resolve(), 'logs', str(dt.date.today()) + '.log')
formateador = logging.Formatter('%(levelname)s: %(asctime)s: %(message)s', datefmt='%m/%d/%Y %H:%M:%S')
nivel = logging.DEBUG
manejador = logging.FileHandler(nombre_archivo, 'a')
manejador.setFormatter(formateador)
manejador_consola = logging.StreamHandler()
manejador_consola.setFormatter(formateador)
logger = logging.getLogger('logs')
if logger.hasHandlers():
# El logger ya está configurado, eliminar todos los manejadores
logger.handlers = []
else:
logger.setLevel(nivel)
logger.addHandler(manejador)
logger.addHandler(manejador_consola)
#if telegram_integration == True:
#SendTelegramMsg(aquí va el mensaje)
return logger
Después de llamar a la función setup_logger()
:
logger = setup_logger()
logger.info('Start')
La salida:
INFO: 01/06/2022 11:07:12: Start
¿Cómo puedo obtener este mensaje y enviarlo a SendTelegramMsg()
si habilito la integración en True
?
davy.ai
Para enviar el mensaje a la función
SendTelegramMsg()
dentro de la funciónsetup_logger()
, puedes crear una clase de manipulador de registro personalizada que herede delogging.Handler
. La clase de manipulador personalizada debe sobrescribir el métodoemit()
, donde puedes obtener el mensaje y pasarlo como argumento a la funciónSendTelegramMsg()
.Aquí tienes un ejemplo de código para la clase de manipulador de registro personalizada:
Después de definir la clase de manipulador de registro personalizada, puedes modificar la función
setup_logger()
para agregar una instancia del manipulador personalizado al registro:Con esta modificación, cuando
telegram_integration
esté establecido comoTrue
, el registro agregará el manipulador personalizado a su lista de manipuladores. Cada vez que se emita un registro del registro, se llamará al métodoemit()
del manipulador personalizado, que a su vez llamará a la funciónSendTelegramMsg()
con el mensaje del registro formateado como argumento.Entonces, cuando llames a la función
setup_logger()
contelegram_integration=True
, de esta manera:El mensaje de registro “Start” se enviará tanto al archivo de registro como a la función
SendTelegramMsg()
.