记录来自 aiohttp 的 http 请求
logging http requests from aiohttp
我想记录 aiohttp ClientSession
. The docs provide a list of available loggers 发送的所有 HTTP 请求。所以我尝试了以下方法:
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 服务器设置日志记录。有趣的是,他们必须显式注册记录器:
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))
客户也有这个必要吗?
我可以合理地注入我的记录器的唯一方法可能是会话。但是 ClientSession 的 API reference 没有指定任何记录器参数。
客户端请求-响应生命周期非常复杂,这就是 aiohttp 不记录它的原因。
请使用client tracing为所有步骤注册回调。之后,您可以通过任何方便的方法(打印、日志记录等)记录所有事件。
我所需要的只是导入日志记录并添加
logging.basicConfig(level=logging.DEBUG)
在我的 make_app() 中。
默认的 access.log 格式非常冗长,所以我用 web.run_app
的 access_log_format 参数让它平静下来
web.run_app(app, access_log_format=" :: %r %s %T %t")
我想记录 aiohttp ClientSession
. The docs provide a list of available loggers 发送的所有 HTTP 请求。所以我尝试了以下方法:
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 服务器设置日志记录。有趣的是,他们必须显式注册记录器:
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))
客户也有这个必要吗? 我可以合理地注入我的记录器的唯一方法可能是会话。但是 ClientSession 的 API reference 没有指定任何记录器参数。
客户端请求-响应生命周期非常复杂,这就是 aiohttp 不记录它的原因。
请使用client tracing为所有步骤注册回调。之后,您可以通过任何方便的方法(打印、日志记录等)记录所有事件。
我所需要的只是导入日志记录并添加
logging.basicConfig(level=logging.DEBUG)
在我的 make_app() 中。
默认的 access.log 格式非常冗长,所以我用 web.run_app
的 access_log_format 参数让它平静下来web.run_app(app, access_log_format=" :: %r %s %T %t")