如何在Azure函数应用中为含点号的日志类别配置运行时过滤级别?
问题场景
已有一个Azure Function应用,在appsettings.json中为日志类别MyCompany.IAM.AssetGovernance(基于C#命名空间)配置了Information级别的日志过滤。需要在运行时无需修改appsettings.json和重新部署的前提下,将该类别的日志级别调整为Debug。
尝试设置App Service应用设置键为Logging__LogLevel__MyCompany.IAM.AssetGovernance但无效,原因是Linux环境下App Service会将键中的点号“.”替换为单下划线“_”,导致无法匹配目标日志类别;若设置为Logging__LogLevel__MyCompany虽能生效,但会包含应用所有调试日志,范围过广。
解决方案
将日志类别名称中的每个点号“.”替换为双下划线“__”,设置App Service应用设置的键为:
Logging__LogLevel__MyCompany__IAM__AssetGovernance
对应值设置为Debug即可。
原理:Azure App Service在Linux环境中,不仅会将JSON嵌套结构的冒号“:”替换为双下划线“__”,对于日志类别这种带点号的命名空间层级,也可以通过双下划线替代点号的方式,让配置系统正确解析出对应的精准日志类别,避免点号被替换为单下划线导致的匹配失败。
文档参考
在默认Linux应用服务或自定义Linux容器中,应用设置名称中任何嵌套的JSON键结构(如ApplicationInsights:InstrumentationKey)需在App Service中配置为ApplicationInsights__InstrumentationKey,即冒号“:”需替换为双下划线“__”,应用设置名称中的任何点号会被替换为单下划线“_”。
内容的提问来源于stack exchange,提问作者Shuzheng

