Azure Function信息日志未出现在Logs workspace的原因排查
问题分析与解决方案
一、Information日志未进入Logs Workspace的核心原因:采样规则拦截
你的Application Insights启用了采样功能,Information级别日志属于高频生成的Trace类型日志,大概率被采样逻辑过滤掉了——虽然你排除了Request;Exception类型,但默认采样规则会对Trace日志进行抽样,只有Warning/Error这类低优先级、低频率的日志会被完整保留。
解决方法:调整采样规则
修改host.json中的samplingSettings,可选两种方案:
- 把Trace类型加入采样排除列表,确保Information级别的Trace日志不被过滤
"applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request;Exception;Trace", "maxTelemetryItemsPerSecond": 100 // 可根据业务流量调整阈值 } }
- 测试环境可直接关闭采样(生产环境不建议,会增加数据量成本)
"samplingSettings": { "isEnabled": false }
二、host.json配置不生效的排查与修复
1. 确认配置文件已正确部署
登录Azure门户,进入Function App的高级工具 > Kudu > 站点 > wwwroot,查看host.json的实际内容是否和你本地修改的一致。如果不一致,重新部署配置文件。
2. 检查是否有环境变量覆盖配置
Azure Functions会优先读取环境变量中的日志配置,前往Function App > 配置 > 应用程序设置,检查是否存在以下环境变量:
AzureFunctionsJobHost__logging__LogLevel__DefaultAzureFunctionsJobHost__logging__applicationInsights__LogLevel__Default
如果存在,删除这些环境变量,让host.json的配置生效。
3. 修正日志类别匹配规则
你配置中指定的Function.Function1等类别如果和实际函数的命名空间/类别名称不匹配,规则不会生效。可以改用更精准的命名空间匹配:
"LogLevel": { "Default": "Error", "Microsoft": "Error", // 过滤微软组件的冗余日志 "YourFunctionNamespace.Functions": "Error" // 替换成你实际的函数命名空间 }
4. 重启Function App
修改host.json或环境变量后,必须重启Function App才能让新配置生效,在概览页点击重启按钮即可。
三、额外验证步骤
- 在Logs Workspace中执行Kusto查询,确认日志是否被采样:
traces | where severityLevel == 2 // Information级别对应severityLevel=2 | extend isSampled = tobool(customDimensions['ai.sampling.sampleRate'] != '100') | project timestamp, message, isSampled
如果isSampled为true,说明日志确实被采样过滤了。
- 检查Application Insights的全局采样规则:进入Application Insights资源的配置 > 采样,确认没有自定义采样规则覆盖
host.json的设置。
内容的提问来源于stack exchange,提问作者Muflix
相关产品推荐
相关产品推荐

