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

如何在Django中排除DJStripe日志,避免其输出到控制台?

解决Django中DJStripe日志仍输出到控制台的问题

我尝试在Django中排除DJStripe日志,防止其输出到控制台。已在settings.py中配置了如下LOGGING设置,但执行Stripe操作时仍能在控制台看到相关日志。

配置代码:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "file": {
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "web_debug.log",
        },
        "console": {
            "level": "INFO",
            "class": "logging.StreamHandler",
        },
        "djstripe_file": {  # File handler specifically for djstripe
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "djstripe.log",
        },
    },
    "loggers": {
        "djstripe": {  # Logger specifically for djstripe
            "handlers": ["djstripe_file"],  # Using the djstripe_file handler
            "level": "WARNING",
            "propagate": False,
        },
    },
    "root": {  # Correctly defining the root logger outside the "loggers" dictionary
        "handlers": ["console"],
        "level": "INFO",
    },
}

解决方案

以下几种方法可以解决这个问题:

  • 覆盖所有DJStripe子日志器
    DJStripe内部可能使用djstripe.webhook、djstripe.models等子日志器,仅配置根级djstripe日志器可能无法覆盖这些子日志器。添加通配符配置:
"loggers": {
    "djstripe": {
        "handlers": ["djstripe_file"],
        "level": "WARNING",
        "propagate": False,
    },
    "djstripe.*": {
        "handlers": ["djstripe_file"],
        "level": "WARNING",
        "propagate": False,
    },
},
  • 给控制台handler添加过滤规则
    直接在控制台handler中添加过滤器,拒绝所有来自djstripe的日志记录。先定义过滤器,再绑定到控制台handler:
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "filters": {
        "exclude_djstripe": {
            "()": "django.utils.log.CallbackFilter",
            "callback": lambda record: not record.name.startswith("djstripe"),
        },
    },
    "handlers": {
        "file": {
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "web_debug.log",
        },
        "console": {
            "level": "INFO",
            "class": "logging.StreamHandler",
            "filters": ["exclude_djstripe"],  # 应用过滤器
        },
        "djstripe_file": {
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "djstripe.log",
        },
    },
    "loggers": {
        "djstripe": {
            "handlers": ["djstripe_file"],
            "level": "WARNING",
            "propagate": False,
        },
    },
    "root": {
        "handlers": ["console"],
        "level": "INFO",
    },
}
  • 尝试禁用现有日志器
    如果第三方库提前初始化了日志器,可能导致你的配置不生效。将disable_existing_loggers设为True,同时手动配置需要保留的日志器(比如django核心日志器):
LOGGING = {
    "version": 1,
    "disable_existing_loggers": True,  # 禁用现有日志器
    "handlers": {
        "file": {
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "web_debug.log",
        },
        "console": {
            "level": "INFO",
            "class": "logging.StreamHandler",
        },
        "djstripe_file": {
            "level": "DEBUG",
            "class": "logging.FileHandler",
            "filename": BASE_DIR / "djstripe.log",
        },
    },
    "loggers": {
        "django": {  # 保留django核心日志
            "handlers": ["console", "file"],
            "level": "INFO",
            "propagate": True,
        },
        "djstripe": {
            "handlers": ["djstripe_file"],
            "level": "WARNING",
            "propagate": False,
        },
        "djstripe.*": {
            "handlers": ["djstripe_file"],
            "level": "WARNING",
            "propagate": False,
        },
    },
    "root": {
        "handlers": ["console"],
        "level": "INFO",
    },
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:31