如何将Azure Function自定义属性以JSON格式写入Log Analytics?
解决方案
1. 关联App Insights与Log Analytics工作区
只有当你的App Insights实例为基于工作区的类型,或已手动链接到Log Analytics工作区时,App Insights中的Traces表数据才会同步到Log Analytics中。若使用的是经典App Insights实例,建议升级为基于工作区的类型,这样TrackTrace生成的日志会自动出现在Log Analytics的Traces表内。
2. 让_logger输出带自定义属性的结构化日志
不要用字符串拼接方式记录日志,改用结构化语法传递自定义属性,这样属性会自动归入customDimensions字段:
// 方式1:通过匿名对象传递自定义属性 _logger.LogInformation("用户操作日志", new { prop1 = "value1", prop2 = "value2" }); // 方式2:通过字典传递自定义属性 var customProps = new Dictionary<string, object> { {"prop1", "value1"}, {"prop2", "value2"} }; _logger.LogInformation("用户操作日志", customProps);
这类日志在App Insights的Traces表中会保留结构化属性,同步到Log Analytics后,可直接用customDimensions.prop1或customDimensions['prop1']查询。
3. 调整host.json配置优化日志行为
修改配置避免Trace日志被采样过滤,同时确保日志输出格式符合结构化要求:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingExcludedTypes": "Request,Trace", "samplingSettings": { "isEnabled": true, "maxTelemetryItemsPerSecond": 500 } }, "logLevel": { "FunctionApps": "Information", "Microsoft": "Warning" }, "console": { "isEnabled": true, "formatterName": "json" } } }
samplingExcludedTypes添加Trace:防止TrackTrace和结构化日志被采样过滤console.formatterName设为json:让日志以JSON格式输出,Log Analytics采集时能保留结构(推荐优先用Traces表统一查询)
4. 验证日志查询
配置完成后等待10-15分钟让数据同步,在Log Analytics中:
- 查询
Traces表:可看到TrackTrace和_logger结构化日志的所有记录,通过customDimensions字段筛选自定义属性 - 若使用
FunctionAppLogs表:结构化日志的JSON会解析到Properties字段,可通过Properties.prop1查询
内容的提问来源于stack exchange,提问作者Mocas
相关产品推荐
相关产品推荐

