如何在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
相关产品推荐
相关产品推荐

