如何一次性设置所有Connexion日志级别,减少冗余日志输出
如何停止或减少Connexion相关的日志输出?
提问内容:
目前已知的两种方案都无法满足需求:
- 把整个应用的所有日志限制为特定级别(DEBUG、INFO、WARNING等):影响范围太广,不符合实际使用场景要求
- 单独给具体的Connexion日志器(例如
connexion.operations.abstract)设置级别:范围太窄,Connexion存在大量不同的日志器,这种机制适合Connexion本身的开发场景,日常使用配置太繁琐
- 我已经自行整理了多个
connexion.*开头的日志器列表,通过structlog.get_logger(logger_name).setLevel(logging.WARNING)调整级别后,仍然有大量DEBUG级别的大体积日志输出,日志前缀包括:
Attaching x-scope to {Ref #/components/Dereferencing {有没有方法可以清除这类日志?最好是可以通过通配符匹配所有相关日志器,比如直接匹配
connexion.*统一设置级别?
回答
Python 标准 logging 模块本身采用分层命名设计,天然支持你需要的「批量配置同命名空间下所有日志器」的需求,不需要通配符匹配,以下是可直接落地的方案:
方案1:配置 Connexion 根日志器统一生效
所有以connexion.开头的子日志器都会默认继承父日志器connexion的级别配置,你只需要给最顶层的connexion日志器设置级别即可覆盖所有Connexion原生输出的日志:
import logging # 统一将所有Connexion日志级别设为WARNING及以上才输出 logging.getLogger("connexion").setLevel(logging.WARNING)
如果你使用structlog,对应配置如下:
import structlog structlog.get_logger("connexion").setLevel(logging.WARNING)
方案2:处理依赖库输出的额外日志
你提到的Attaching x-scope to {、Dereferencing {这类日志不属于Connexion本身的日志器输出,是Connexion依赖的OpenAPI规范解析类第三方库输出的,需要额外配置这些依赖库的根日志器级别:
import logging # 覆盖Connexion依赖的OpenAPI相关库的日志级别 RELATED_LOGGERS = [ "openapi_core", "openapi_spec_validator", "openapi_schema_validator", "jsonschema" ] for logger_name in RELATED_LOGGERS: logging.getLogger(logger_name).setLevel(logging.WARNING)
极端场景兜底方案:遍历所有日志器批量匹配
如果上述两个方案仍有未覆盖的相关日志,可以遍历当前进程所有已注册的日志器,批量匹配前缀后统一设置级别:
import logging for logger_name in logging.root.manager.loggerDict: # 可自行调整匹配的前缀列表 if logger_name.startswith(("connexion", "openapi_", "jsonschema")): logging.getLogger(logger_name).setLevel(logging.WARNING)
内容的提问来源于stack exchange,提问作者Michal Vašut
相关产品推荐
相关产品推荐

