首页 > 解决方案 > python aio libray 日志和异步方法日志未显示在函数应用程序洞察力中

问题描述

例如,我正在使用 python aio 管理客户端库来创建 azure 资源azure.mgmt.eventhub.aio.EventHubManagementClient

观察

示例代码

    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 函数见解中。

标签: pythonpython-3.xazureazure-functionspython-asyncio

解决方案


当我将 azure 函数主函数本身定义为异步函数时,此问题得到解决,Azure python 工作人员句柄管理事件循环并异步调用此主方法

async def main(req: func.HttpRequest) -> func.HttpResponse:

有了这个,所有 aio 客户端日志和我自己的日志都被登录到应用程序洞察力中。

注意:之前我将上述方法定义为 non-async ,然后通过显式创建事件循环和使用asgiref.async_to_sync库来从 main() 调用 async mehtod


推荐阅读