Django日志配置能否用星号通配符统一管理应用命令日志?
Django日志配置:批量处理app的management.commands日志
结论
Python标准库的logging模块(Django日志系统基于它)不支持*这类通配符格式的logger名称,所以你尝试的"*.management.commands"写法无法生效,不能通过通配符批量匹配多个app的commands logger。
原因
logging的logger采用层级命名规则(比如app1.management.commands的父logger是app1.management,再上层是app1),配置时只能指定具体的层级名称,或利用层级继承来简化,但不支持通配符匹配。
替代方案:避免重复配置的写法
不想重复写相同配置的话,可以通过代码动态生成logger条目,示例如下:
# 定义通用的commands日志配置 COMMAND_LOGGER_SETTINGS = { "handlers": ["console"], "level": "DEBUG", "propagate": False, } LOGGING = { "version": 1, "disable_existing_loggers": False, "handlers": { "console": { "class": "logging.StreamHandler", }, }, "root": { "handlers": ["console"], "level": "WARNING", }, "loggers": { "django": { "handlers": ["console"], "level": "INFO", "propagate": False, }, }, } # 循环为每个app添加commands logger配置 for app in ["app1", "app2", "app3"]: LOGGING["loggers"][f"{app}.management.commands"] = COMMAND_LOGGER_SETTINGS.copy()
这种写法既保持了配置的简洁性,又符合logging系统的要求,无需手动重复编写每个app的相同配置。
内容的提问来源于stack exchange,提问作者Johnny Metz
相关产品推荐
相关产品推荐

