diff --git a/astrbot/core/log.py b/astrbot/core/log.py index 0bee30110..d2312b71a 100644 --- a/astrbot/core/log.py +++ b/astrbot/core/log.py @@ -93,10 +93,36 @@ def _patch_record(record: "Record") -> None: _loguru = _raw_loguru_logger.patch(_patch_record) +class _SSLDebugFilter(logging.Filter): + """将特定 SSL 错误降级为 DEBUG 级别,避免日志刷屏。""" + + _SSL_IGNORE_PATTERNS = ( + "APPLICATION_DATA_AFTER_CLOSE_NOTIFY", + "SSL: APPLICATION_DATA_AFTER_CLOSE_NOTIFY", + ) + + def filter(self, record: logging.LogRecord) -> bool: + msg = record.getMessage() + for pattern in self._SSL_IGNORE_PATTERNS: + if pattern in msg: + record.levelno = logging.DEBUG + record.levelname = "DEBUG" + return True + return True + + class _LoguruInterceptHandler(logging.Handler): """将 logging 记录转发到 loguru。""" def emit(self, record: logging.LogRecord) -> None: + # 检查是否需要降级 SSL 相关错误 + msg = record.getMessage() + for pattern in _SSLDebugFilter._SSL_IGNORE_PATTERNS: + if pattern in msg: + record.levelno = logging.DEBUG + record.levelname = "DEBUG" + break + try: level: str | int = _loguru.level(record.levelname).name except ValueError: @@ -179,6 +205,8 @@ class LogManager: "asyncio": logging.WARNING, "tzlocal": logging.WARNING, "apscheduler": logging.WARNING, + "quart": logging.WARNING, + "hypercorn": logging.WARNING, } @classmethod