You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获Python logging逐行日志存入变量并发送到Pyrogram聊天

你之前的代码不生效有两个核心原因:

  • logging.debug() 这类方法本身返回值为None,无法直接通过赋值拿到日志内容
  • 把Handler初始化逻辑写在异常捕获块内,会导致每次触发异常都重复添加Handler,且StringIO的方案无法实现实时逐行捕获触发推送

实现步骤

1. 自定义日志Handler

直接继承logging.Handler类,重写emit方法,每生成一条符合级别要求的日志时,自动触发Pyrogram消息发送:

import logging
from pyrogram import Client

# 初始化你的Pyrogram客户端,替换为你自己的参数
app = Client("my_bot", api_id=12345, api_hash="xxx", bot_token="xxx")
LOG_CHAT_ID = 123456789 # 替换为你要发送日志的聊天ID

class PyrogramLogHandler(logging.Handler):
    def emit(self, record):
        # 格式化日志内容
        log_msg = self.format(record)
        # 防止发送过程中出现异常导致主程序崩溃,加一层异常捕获
        try:
            app.send_message(chat_id=LOG_CHAT_ID, text=log_msg)
        except Exception as e:
            # 可选:将发送失败的问题输出到控制台,避免静默失败
            print(f"日志发送失败: {str(e)}")

2. 全局配置日志

在程序启动时一次性完成日志配置,同时保留控制台输出的能力:

def init_logger():
    logger = logging.getLogger()
    # 设置全局日志级别,低于该级别的日志会被忽略
    logger.setLevel(logging.DEBUG)
    
    # 定义日志格式,和你之前的需求保持一致
    formatter = logging.Formatter(
        "📅 %(asctime)s 🔳 ⚠ #%(levelname)s 🔳 📝 %(message)s",
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 添加控制台输出Handler
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    console_handler.setLevel(logging.DEBUG) # 控制台输出所有DEBUG及以上级别日志
    logger.addHandler(console_handler)
    
    # 添加Pyrogram推送Handler
    tg_handler = PyrogramLogHandler()
    tg_handler.setFormatter(formatter)
    # 如果只需要推送错误及以上级别的日志,就改成logging.ERROR
    tg_handler.setLevel(logging.ERROR)
    logger.addHandler(tg_handler)

# 程序启动时调用一次即可
init_logger()

3. 异常捕获时正常打日志即可

不需要额外处理日志捕获逻辑,直接调用logging对应方法就会自动触发控制台输出+TG推送:

try:
    func()
except Exception as e:
    # exc_info=True会自动把异常栈信息加入日志内容
    logging.error("函数执行出错", exc_info=True)

注意事项

  • 不要在每次异常捕获时重复初始化Handler和日志配置,否则会导致同一条日志重复推送多次
  • 如果日志内容过长超过Telegram消息长度限制(4096字符),可以自行拆分后发送或者改成发送文件
  • Pyrogram客户端需要先完成登录/初始化,再调用send_message方法,建议在客户端启动完成后再初始化日志Handler

日志输出示例

内容的提问来源于stack exchange,提问作者Ali Abdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:04