python - 记录来自 aiohttp 的 http 请求
问题描述
我想记录aiohttp ClientSession
发送的所有 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 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))
这对客户也有必要吗?我可以合理地注入我的记录器的唯一方法可能是会话。但是 ClientSession 的API 参考没有指定任何记录器参数。
解决方案
我所需要的就是导入日志并添加
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")
推荐阅读
- google-chrome-extension - Chrome 扩展跨多个浏览器实例管理后台状态
- python - ModuleNotFoundError:尽管本地更改,但在推送到 Heroku 时 importlib
- haskell - 如何在 Haskell 中工作的返回类型上获得“不可预测的”重载?
- javascript - amcharts 4 中的 24 小时雷达图
- google-maps - 位置不好 Google Maps Xamarin Forms(大洋中部)
- security - 在 Win 8.1 和 Win 10 下禁用虚拟智能卡的 PIN 缓存
- css - 在独立的 Vue 组件上使用父页面中的类
- python - 在包含列表的单元格上合并两个 pandas DataFrame
- javascript - ng-controller 包含在另一个控制器潜在范围问题内
- node.js - Mongodb Node js 连接性