gpt4 book ai didi

python - 使用 aiohttp.ClientSession() 发出请求时如何为 aiohttp.client 设置日志记录?

转载 作者:太空狗 更新时间:2023-10-30 02:26:14 25 4
gpt4 key购买 nike

我有一些代码对某些 API 进行请求序列。我想为所有人设置通用日志记录,我该如何设置?

假设我的代码是这样的

import aiohttp
import asyncio

async def fetch(client):
async with client.get('http://httpbin.org/get') as resp:
assert resp.status == 200
return await resp.text()

async def post_data(client):
async with client.post('http://httpbin.org/post', data={'foo': 'bar'}) as resp:
assert resp.status == 200
return await resp.text()

async def main(loop):
async with aiohttp.ClientSession(loop=loop) as client:
html = await fetch(client)
print(html)
other_html = await post_data(client)
print(other_html)

loop = asyncio.get_event_loop()
loop.run_until_complete(main(loop))

现在我想查看所有发出的请求的状态代码、url、 header 和所有内容,因此日志中的输出如下所示:

2017-08-09 08:44:30 DEBUG (200) <GET http://httpbin.org/get>
2017-08-09 08:44:30 DEBUG (200) <POST http://httpbin.org/post>

我知道我可以在每次请求后添加 logger.log() 调用,但那会是重复的。如果我有更多请求,我将不得不在调用 logger.log 的每个请求下编写重复代码。似乎效率低下。

aiohttp.client logger ,但没有详细说明如何设置它。

我正在尝试这样设置

logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
logging.getLogger('aiohttp.client').addHandler(ch)

但它不会打印我想看到的信息(例如响应状态代码、url)。

有什么方法可以实现我所需要的吗?也许我可以订阅来自客户端的一些信号并在发送信号时记录一些消息?例如。有一些机制可以订阅客户端收到响应时发送的信号,然后在上面记录消息吗?

最佳答案

在撰写本文时 (11/2020),您应该使用 tracing functionality of aiohttp :

import asyncio
import logging
import aiohttp


async def on_request_start(session, context, params):
logging.getLogger('aiohttp.client').debug(f'Starting request <{params}>')


async def main():
logging.basicConfig(level=logging.DEBUG)
trace_config = aiohttp.TraceConfig()
trace_config.on_request_start.append(on_request_start)
async with aiohttp.ClientSession(trace_configs=[trace_config]) as session:
await session.get('https://google.com')


asyncio.run(main())

关于python - 使用 aiohttp.ClientSession() 发出请求时如何为 aiohttp.client 设置日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45586516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com