Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

269
Vistas
¿Cómo obtener un mensaje de la función de registro?

Tengo una función de logger del paquete de logging que, después de llamarlo, puedo enviar el mensaje a través del 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 recibir el mensaje después de llamar a la setup_logger enviar un mensaje a través logger.info("Start") por ejemplo, y luego enviar exactamente el mismo mensaje a la función SendTelegramMsg() que está dentro de la función setup_logger ?

Mi función actualmente setup_logger :

 # Define the logging level and the file name def setup_logger(telegram_integration=False): """To setup as many loggers as you want""" filename = os.path.join(os.path.sep, pathlib.Path(__file__).parent.resolve(), 'logs', str(dt.date.today()) + '.log') formatter = logging.Formatter('%(levelname)s: %(asctime)s: %(message)s', datefmt='%m/%d/%Y %H:%M:%S') level = logging.DEBUG handler = logging.FileHandler(filename, 'a') handler.setFormatter(formatter) consolehandler = logging.StreamHandler() consolehandler.setFormatter(formatter) logger = logging.getLogger('logs') if logger.hasHandlers(): # Logger is already configured, remove all handlers logger.handlers = [] else: logger.setLevel(level) logger.addHandler(handler) logger.addHandler(consolehandler) #if telegram_integration == True: #SendTelegramMsg(message goes here) 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 recibir este mensaje y enviarlo a SendTelegramMsg() si habilito la integración en True ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Implemente un logging.Handler personalizado:

 class TelegramHandler(logging.Handler): def emit(self, record): message = self.format(record) SendTelegramMsg(message) # SendTelegramMsg(message, record.levelno) # Passing level # SendTelegramMsg(message, record.levelname) # Passing level name

Agregue el controlador:

 def setup_logger(telegram_integration=False): # ... if telegram_integration: telegram_handler = TelegramHandler() logger.addHandler(telegram_handler) return logger

Uso, sin cambios:

 logger = setup_logger() logger.info("Start")
over 4 years ago · Santiago Trujillo Denunciar

0

Retomando la idea sugerida por @gold_cy: implementa un logging.Handler personalizado. Algunos consejos para eso:

  • para que el controlador pueda enviar mensajes a través de un bot, es posible que desee pasar el bot a los controladores __init__ para que esté disponible más adelante
  • emit debe ser implementado por usted. Aquí querrá llamar al format que le da una versión formateada del registro. Luego puede usar ese mensaje para enviarlo a través del bot
  • Tal vez también sea útil echar un vistazo a la implementación de StreamHandler y FileHandler
over 4 years ago · Santiago Trujillo Denunciar

0

#Defining a global flag tlInt=False # Define the logging level and the file name def setup_logger(telegram_integration=False): """To setup as many loggers as you want""" filename = os.path.join(os.path.sep, pathlib.Path(__file__).parent.resolve(), 'logs', str(dt.date.today()) + '.log') formatter = logging.Formatter('%(levelname)s: %(asctime)s: %(message)s', datefmt='%m/%d/%Y %H:%M:%S') level = logging.DEBUG handler = logging.FileHandler(filename, 'a') handler.setFormatter(formatter) consolehandler = logging.StreamHandler() consolehandler.setFormatter(formatter) logger = logging.getLogger('logs') if logger.hasHandlers(): # Logger is already configured, remove all handlers logger.handlers = [] else: logger.setLevel(level) logger.addHandler(handler) logger.addHandler(consolehandler) if telegram_integration == True: global tlInt tlInt=True return logger #Logic : If telegram integration is true, it will call SendTelegramMsg to send the message to the app based on the level; and if it is false, it will save the message in local file based on the level def GenerateLog(logger,levelFlag,data): global tlInt if tlInt == True: SendTelegramMsg(levelFlag,data) else: if levelFlag == "warning": logger.warning(data) elif levelFlag == "error": logger.error(data) elif levelFlag == "debug": logger.debug(data) elif levelFlag == "critical": logger.critical(data) else: logger.info(data) #You can used the same logic in SendTelegramMsg which used in GenerateLog for deciding the level def SendTelegramMsg(levelFlag,data): #your code goes here logger=setup_logger() GenerateLog(logger,'warning','Start')
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda