python - python aio libray 日志和异步方法日志未显示在函数应用程序洞察力中
问题描述
例如,我正在使用 python aio 管理客户端库来创建 azure 资源azure.mgmt.eventhub.aio.EventHubManagementClient
观察:
- 当调用管理服务 API 时,对应的 azure 同步库(例如
azure.mgmt.eventhub.EventHubManagementClient
)打印 http 日志,但异步库不打印类似的日志 - 此外,当我使用异步方法并在异步方法中使用 python 记录器时,即使这些日志也不会打印。
示例代码
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO)
async def _create_or_update_eventhub_namespace_authorization_rule(self, authorization_rule_name,
rights: AccessRights):
await self._event_management_client.namespaces.create_or_update_authorization_rule(
resource_group_name=EnvironmentVariables.RESOURCE_GROUP_NAME,
namespace_name=self._env_var_obj.event_hub_name_space_name,
authorization_rule_name=authorization_rule_name,
parameters={
"rights": [rights]
}
)
logger.info('Provisioned EH-Namespace Rule:' + authorization_rule_name)
在这里create_or_update_authorization_rule()
,我自己的日志都没有显示在 Azure 函数见解中。
解决方案
当我将 azure 函数主函数本身定义为异步函数时,此问题得到解决,Azure python 工作人员句柄管理事件循环并异步调用此主方法
async def main(req: func.HttpRequest) -> func.HttpResponse:
有了这个,所有 aio 客户端日志和我自己的日志都被登录到应用程序洞察力中。
注意:之前我将上述方法定义为 non-async ,然后通过显式创建事件循环和使用asgiref.async_to_sync
库来从 main() 调用 async mehtod
推荐阅读
- javascript - Angular 从 firebase 存储中获取 files.length
- javascript - 为什么 getDataRange.getValues() 没有提取所有必需的值?
- node.js - nodejs+mongodb原生驱动+ExpressJS Rest API-一次连接,复用设计建议
- javascript - 如何使用 Ajax 一键提交两个表单
- assembly - NASM:如何正确访问 ssd 驱动器?
- asp.net - 在 Razor Pages 表单中上传文件时出现可选问题
- flutter - 在 Flutter 中添加新文本行的问题
- c# - 如何在 MainLayout 中获取输入参数?
- php - MacOS Laravel Valet 增加 memory_limit
- macos - 在 MacOSX 上找不到“dotnet”时让 F# 在 VSCode 中工作?