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
?
实现自定义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)