首页 > 解决方案 > 使用 DJango 日志记录配置记录 SQL。记录器总是试图与公共模式连接

问题描述

以下是我们的 Django 应用程序的日志记录配置

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.db.backends记录器来打印应用程序生成的查询。但从输出来看,记录器似乎正在连接到public schema

2021-10-06 13:37:39,704 django.db.backends 123  utils DEBUG    (0.089) 
            SELECT c.relname, c.relkind
            FROM pg_catalog.pg_class c
            LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
            WHERE c.relkind IN ('r', 'v', '')
                AND n.nspname = 'public'
                AND pg_catalog.pg_table_is_visible(c.oid); args=None

添加日志配置后,我们没有看到除此之外的任何查询。

该应用程序实际上正在使用另一种模式来存储和检索数据,并django-tenant作为自研框架的一部分使用。

笔记

我们可以看到该行 2021-10-06 09:39:58,096 django.utils.autoreload 368 autoreload DEBUG正在连续打印。

例如:2021-10-06 09:39:58,096 django.utils.autoreload 368 autoreload DEBUG File /home/foo/Desktop/bar/my_env/lib/python3.8/site-packages/fido2/attestation/android.py first seen with mtime 1612337859.0

标签: djangopostgresqllogging

解决方案


推荐阅读