Django配置SQL日志仅打印public schema查询无业务SQL问题求助
解决方案
你的问题核心是两处日志配置覆盖不全,直接调整loggers配置段即可解决:
原因说明
- 业务租户schema的SQL未输出:
django-tenant组件对租户的数据库连接做了独立封装,租户场景下产生的SQL查询对应的日志器名称不是Django默认的django.db.backends,而是django_tenants.db.backends,你原来的配置没有覆盖这个日志器。 - 自动重载日志冗余:
django.utils.autoreload默认在DEBUG模式下会输出所有文件变动的DEBUG日志,只需要把这个日志器的级别调高即可屏蔽无用输出。
修改后的完整配置
logging.config.dictConfig({ 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(asctime)s %(name)-12s %(lineno)d %(module)s %(levelname)-8s %(message)s' }, 'simple': { 'format': '%(levelname)s %(message)s' }, }, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse' } }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', 'maxBytes': 15728640, # 100MB 'backupCount': 10, 'formatter': 'verbose', 'filename': 'log_files/acme-slcms.log', 'encoding': 'utf-8', }, 'mail_admins': { 'level': 'CRITICAL', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler' }, }, 'loggers': { 'django': { 'propagate': True, 'level': 'DEBUG', 'handlers': ['file'], }, 'django.db.backends': { 'propagate': False, 'level': 'DEBUG', 'handlers': ['file'], }, # 新增:适配django-tenant租户schema的SQL日志输出 'django_tenants.db.backends': { 'propagate': False, 'level': 'DEBUG', 'handlers': ['file'], }, # 新增:屏蔽autoreload的DEBUG级无用日志 'django.utils.autoreload': { 'propagate': False, 'level': 'INFO', 'handlers': ['file'], } } })
补充说明
如果你使用的是旧版的django-tenant-schemas包而非django-tenants,把新增的租户SQL日志器名称替换为django_tenant_schemas.db.backends即可正常生效。
内容的提问来源于stack exchange,提问作者kallada
相关产品推荐
相关产品推荐

