如何从日志功能中获取消息?

Gui*_*eus 7 python logging python-telegram-bot

我有一个包logger中的函数logging,调用它后,我可以通过 发送消息logging level

我还想将此消息发送到另一个函数,这是一个名为 的 Telegram 函数SendTelegramMsg()

例如,在调用函数setup_logger发送消息后如何获取消息,然后将完全相同的消息发送到函数内部的函数?logger.info("Start")SendTelegramMsg()setup_logger

我目前的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
Run Code Online (Sandbox Code Playgroud)

我调用该函数后setup_logger()

logger = setup_logger()
logger.info("Start")
Run Code Online (Sandbox Code Playgroud)

输出:

INFO: 01/06/2022 11:07:12: Start
Run Code Online (Sandbox Code Playgroud)

SendTelegramMsg()如果我启用集成,我如何才能获取此消息并将其发送到True

aar*_*ron 9

实现自定义logging.Handler

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
Run Code Online (Sandbox Code Playgroud)

添加处理程序:

def setup_logger(telegram_integration=False):
    # ...

    if telegram_integration:
        telegram_handler = TelegramHandler()
        logger.addHandler(telegram_handler)

    return logger
Run Code Online (Sandbox Code Playgroud)

用法,没有变化:

logger = setup_logger()
logger.info("Start")
Run Code Online (Sandbox Code Playgroud)