从Microsoft.Rest.ClientRuntime迁移至Azure.Core的方法及追踪类替代方案
从Microsoft.Rest.ClientRuntime迁移到Azure.Core的追踪替代方案
问题背景
项目依赖的Microsoft.Rest.ClientRuntime(最新版本2.3.24)已被标记为弃用,官方推荐迁移至Azure.Core包。需要替换原基于ServiceClientTracing的追踪逻辑,示例代码如下:
bool _traced = ServiceClientTracing.IsEnabled; string _id = null; if (_traced) { _id = ServiceClientTracing.NextInvocationId.ToString(); Dictionary<string, object> _params = new Dictionary<string, object>(); _params.Add("someKey", someKey); _params.Add("someToken", someToken); ServiceClientTracing.Enter(_id, this, "AddPowerBIEncryptionKey", _params); } // 后续逻辑...
替代方案
Azure.Core的诊断追踪依赖标准.NET的System.Diagnostics.Activity框架,对应替代组件是ActivitySource和Activity,替代逻辑如下:
- 首先在类级别定义静态
ActivitySource实例:
private static readonly ActivitySource _activitySource = new ActivitySource("Your.Application.Identifier");
- 替换原追踪代码:
using (var activity = _activitySource.StartActivity("AddPowerBIEncryptionKey")) { if (activity != null) { // 将原追踪参数转为Activity标签 activity.AddTag("someKey", someKey); activity.AddTag("someToken", someToken); // 业务逻辑代码... } }
- 原
ServiceClientTracing.IsEnabled的判断无需手动处理:ActivitySource.StartActivity会自动检测是否有追踪监听者,无监听时返回null。 - 原
NextInvocationId对应的追踪ID,由Activity自动生成维护,可通过activity.Id直接获取。
迁移说明
- 目前没有官方提供的
Microsoft.Rest.ClientRuntime到Azure.Core的一对一迁移文档,但Azure.Core的诊断系统完全遵循现代.NET追踪规范,你可以基于Activity框架的现有能力调整追踪逻辑。 - Azure.Core的客户端默认已集成该诊断体系,自定义追踪通过
ActivitySource即可和Azure服务的链路追踪打通。
内容的提问来源于stack exchange,提问作者Rahul Roy
相关产品推荐
相关产品推荐

