журнал запросов базы данных django - PullRequest
0 голосов
/ 07 декабря 2018

Я регистрирую свои запросы к базе данных в Django вместе с путем и именем белья.

Сейчас я получаю следующие журналы:

07/Dec/2018 14:25:00 DEBUG django.db.backends utils **/Users/XXXXX/.idea/lib/python2.7/site-packages/django/db/backends/utils.py:89** (0.340) SELECT "metadata"."metaname", "metadata"."description", "metadata"."attributes" FROM "metadata" WHERE "metadata"."metaname" = 'date_type'; args=('date_type',)

Для всех запросовЯ получаю тот же путь и номер строки.Есть ли способ, которым я могу получить номер строки из моего основного приложения вместо номера из утилиты.

Текущая реализация ведения журнала:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'color'
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propogate': True,
        }
    }
}

Использование python 2.7 и django 1.9

1 Ответ

0 голосов
/ 08 декабря 2018

Я предполагаю, что вы пытаетесь определить, какие строки в вашем приложении отвечают за выполнение каких запросов.

Один из способов добиться этого - создать собственный обработчик, который распечатывает текущий стекв тот момент, когда Django регистрирует запрос.Это позволит вам увидеть, какая строка в вашем приложении выполняется.

Вы можете создать собственный обработчик, такой как:

import logging
import traceback

class StackInfoHandler(logging.StreamHandler):

    trim = 5

    def emit(self, record):
        super(StackInfoHandler, self).emit(record)
        stack = ''.join(
            str(row) for row in traceback.format_stack()[:-self.trim]
        )
        self.stream.write(stack)

А затем в вашей конфигурации регистрации вы можете просто переключитьКласс обработчика для использования StackInfoHandler:

'handlers': {
    'console': {
        'level': 'DEBUG',
        'class': 'my.package.StackInfoHandler',  # Reference the custom handler
        'formatter': 'color'
    },
},

Обратите внимание, что StackInfoHandler обрезает 5 строк из стека, чтобы он не отображал кадры стека из самой структуры ведения журнала.Возможно, вам придется настроить это число (у меня 5 работает локально).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...