From 48bb8ebbb93ab750baee00abe640c780eb5df40e Mon Sep 17 00:00:00 2001 From: guts <2030746443@qq.com> Date: Fri, 11 Sep 2026 18:50:25 +0800 Subject: [PATCH] fix: reduce Telegram log spam from polling and conflict errors (#10027) Telegram long-polling floods the log in two ways: 1. python-telegram-bot performs getUpdates through httpx, which logs every request at INFO level. httpx/httpcore were missing from LogManager._NOISY_LOGGER_LEVELS, so those per-request lines (one every ~10s) leaked through. 2. _on_polling_error logged a full traceback for every polling error, including non-network errors such as Conflict (two bot instances polling the same token). Log a concise one-line message for non-network errors and keep the traceback only for NetworkError, which still needs it for recovery. --- astrbot/core/log.py | 2 ++ astrbot/core/platform/sources/telegram/tg_adapter.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/astrbot/core/log.py b/astrbot/core/log.py index f51d7a7940..15b50dbdd7 100644 --- a/astrbot/core/log.py +++ b/astrbot/core/log.py @@ -203,6 +203,8 @@ class LogManager: "asyncio": logging.WARNING, "tzlocal": logging.WARNING, "apscheduler": logging.WARNING, + "httpx": logging.WARNING, + "httpcore": logging.WARNING, } @classmethod diff --git a/astrbot/core/platform/sources/telegram/tg_adapter.py b/astrbot/core/platform/sources/telegram/tg_adapter.py index 636e5d9f4c..9b2cfdd2ab 100644 --- a/astrbot/core/platform/sources/telegram/tg_adapter.py +++ b/astrbot/core/platform/sources/telegram/tg_adapter.py @@ -290,12 +290,19 @@ async def run(self) -> None: await asyncio.sleep(self._polling_restart_delay) def _on_polling_error(self, error: Exception) -> None: + # Non-network errors (e.g. Conflict when two bot instances poll the + # same token) have a clear cause; log a concise message instead of a + # full traceback to avoid filling the log. + if not isinstance(error, NetworkError): + logger.error( + f"Telegram polling request failed: {type(error).__name__}: {error!s}" + ) + return + logger.error( f"Telegram polling request failed: {type(error).__name__}: {error!s}", exc_info=error, ) - if not isinstance(error, NetworkError): - return if self._loop is None: return