протоколирование http запросов от aiohttp - PullRequest
0 голосов
/ 14 ноября 2018

Я хотел бы регистрировать все HTTP-запросы, отправленные aiohttp ClientSession. Документы предоставляют список доступных регистраторов . Поэтому я попробовал следующее:

import asyncio
import logging

import aiohttp

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
http_logger = logging.getLogger("aiohttp.client")
http_logger.setLevel(logging.DEBUG)
http_logger.propagate = True


async def make_request():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://httpbin.org/get') as resp:
            return await resp.text()


loop = asyncio.get_event_loop()
response_text = loop.run_until_complete(make_request())

print(response_text)

Но это дало только следующий результат:

DEBUG:asyncio:Using selector: EpollSelector
// response text print here

Я перепробовал все регистраторы из этого списка в документации, а затем искал вопросы. Это похоже на: указать формат запроса журнала в aiohttp 2

Ответ описывает, как настроить ведение журнала для сервера aiohttp. Интересно, что они должны явно зарегистрировать регистратор:

app = web.Application(loop=loop)
app.router.add_get('/', handle)
app.router.add_get('/{name}', handle)

loop.run_until_complete(
    loop.create_server(
        app.make_handler(access_log=mylogger,   #<--------------- HERE
                         access_log_format='%r %s %b'), '0.0.0.0', 8080))

Это также необходимо для клиента? Единственный способ, которым я мог бы разумно внедрить мой регистратор, был бы вероятно сеанс Но в справочнике API для ClientSession не указывается ни один аргумент логгера.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Все, что мне было нужно, это импортировать логи и добавить

 logging.basicConfig(level=logging.DEBUG)

в моем make_app ().

Формат access.log по умолчанию довольно многословный, поэтому я немного успокоил его аргументом access_log_format в web.run_app

web.run_app(app, access_log_format=" :: %r %s %T %t")
0 голосов
/ 14 ноября 2018

Жизненный цикл запроса-ответа клиента довольно сложный, поэтому aiohttp не регистрирует его.

Пожалуйста, используйте отслеживание клиента , чтобы зарегистрировать обратные вызовы для всех шагов.После этого вы можете регистрировать все события любым удобным способом (печать, ведение журнала и т. Д.).

...