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

如何解决ModuleNotFoundError: No module named 'aiogram.middlewares'错误?

解决aiogram中LoggingMiddleware导入错误的替代方案

问题说明

代码中尝试导入from aiogram.middlewares.logging import LoggingMiddleware时出错,核心原因是aiogram 3.x版本已移除该类,它仅存在于2.x旧版本中。

替代方案

方案1:直接配置标准库logging模块

无需依赖特定中间件,用Python标准库logging配置日志即可,这是官方推荐的方式:

import sqlite3
import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.fsm.context import FSMContext
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from aiogram.fsm.storage.memory import MemoryStorage
from datetime import datetime

# 配置日志格式与级别
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)

async def main():
    bot = Bot(token="YOUR_BOT_TOKEN")
    dp = Dispatcher(storage=MemoryStorage())
    
    # 注册你的命令、处理器逻辑...
    
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

方案2:自定义日志中间件

如果需要记录每个消息/事件的详细流转,可以自己实现轻量中间件:

import sqlite3
import asyncio
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.fsm.context import FSMContext
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from aiogram.fsm.storage.memory import MemoryStorage
from datetime import datetime
from aiogram import BaseMiddleware
from typing import Callable, Dict, Any, Awaitable

# 基础日志配置
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class CustomLoggingMiddleware(BaseMiddleware):
    async def __call__(
        self,
        handler: Callable[[types.TelegramObject, Dict[str, Any]], Awaitable[Any]],
        event: types.TelegramObject,
        data: Dict[str, Any]
    ) -> Any:
        # 记录事件来源与类型
        user_id = data.get('event_from_user', {}).id if 'event_from_user' in data else 'unknown'
        logger.info(f"收到事件:{type(event).__name__},用户ID:{user_id}")
        # 执行后续处理器
        result = await handler(event, data)
        # 记录处理完成
        logger.info(f"事件处理完成:{type(event).__name__}")
        return result

async def main():
    bot = Bot(token="YOUR_BOT_TOKEN")
    dp = Dispatcher(storage=MemoryStorage())
    
    # 给消息、回调查询挂载日志中间件
    dp.message.middleware(CustomLoggingMiddleware())
    dp.callback_query.middleware(CustomLoggingMiddleware())
    
    # 注册你的命令、处理器逻辑...
    
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

方案3:使用aiogram内置日志工具简化配置

借助aiogram.utils.logging快速完成标准化日志配置:

import sqlite3
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.fsm.context import FSMContext
from aiogram.filters import Command
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, CallbackQuery
from aiogram.fsm.storage.memory import MemoryStorage
from datetime import datetime
from aiogram.utils.logging import setup_default_logging

# 一键配置默认日志
setup_default_logging()

async def main():
    bot = Bot(token="YOUR_BOT_TOKEN")
    dp = Dispatcher(storage=MemoryStorage())
    
    # 注册你的命令、处理器逻辑...
    
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

内容的提问来源于stack exchange,提问作者Justin Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:20:16