Django.request logger для поиска "Synchronous middleware ... adapted" для Django async
Я установил пробный async view в моем приложении Django, но представление продолжает рендериться синхронно. Согласно документации Django, я проверяю, что мое Middleware не является причиной проблемы:
Промежуточное ПО может быть построено для поддержки как синхронных, так и асинхронных контекстов. Некоторые из промежуточных программ Django построены подобным образом, но не все. Чтобы узнать, какое промежуточное ПО Django адаптировано, вы можете включить отладочную регистрацию для логгера django.request и поискать в логе сообщения "Synchronous middleware ... adapted".
Уже был задан вопрос на Stack Overflow, чтобы уточнить использование логгера для поиска промежуточного ПО, препятствующего работе async, но ответ неполный.
Вот что у меня есть в настройках, согласно приведенному выше ответу Stack Overflow:
settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.request': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
'propagate': False,
},
},
}
А мое мнение:
views.py
from time import sleep
import asyncio
import logging
logger = logging.getLogger("info")
# --- Views
from django.db import transaction
@transaction.non_atomic_requests
async def async0(request):
#loop = asyncio.get_event_loop()
#loop.create_task(lets_sleep())
await asyncio.sleep(1)
logger.debug('in index')
logger.info('something')
return HttpResponse("Hello, async Django!")
Я перезапустил встроенный сервер Django, но нигде не вижу вывода журнала. Где мне следует искать?
хотя вы опубликовали свое представление, лог относится к промежуточному ПО, поэтому вам нужно иметь sync only middleware для получения нужного вам лога. после этого вам нужно добавить корневой логгер:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"root": {
"level": "DEBUG",
},
"loggers": {
"django.request": {
"handlers": ["console"],
"level": "DEBUG",
},
},
}
этого было достаточно, чтобы я получил сообщение Synchronous middleware someMiddlewareOfYours adapted log msg