Activity 设计总览
AgileLabs Framework 基于 .NET System.Diagnostics.Activity 统一 TraceId/SpanId 管理,通过 AppBuildOptions.ActivityConfiguration 配置监听器和采样策略。
配置入口
ActivityConfiguration.DefaultIdFormat:默认 W3C 格式,兼容分布式追踪系统。ActivityConfiguration.DefaultActivityListener:可以自定义ShouldListenTo与Sample逻辑,默认会监听所有匹配TypeFinderAssemblyScanPattern的ActivitySource。AppActivitySources:框架内置的 Activity Source(如BackgroundService)。
与 WorkContext 集成
- 每个 WorkContext 创建时,框架会启动一个 Activity,并将
TraceId/SpanId写入IRequestSession。 - 在 HTTP 请求开始、后台任务、Hangfire Job 等场景,都能自动获取 Trace 信息。
自定义 Activity
using var scope = AgileLabContexts.Context.CreateScopeWithWorkContext();
using var activity = AppActivitySources.BackgroundService.StartActivity(
name: nameof(StartMessageSchedulerAsync),
kind: ActivityKind.Internal,
parentId: null);
- 通过
parentId可以手动串联链路;如果为null,则创建新的 Root Activity。 - 活动结束 (
Dispose) 后会自动写入日志,便于追踪耗时。
常见场景
- 后台作业:在
IHostedService中使用AppActivitySources.BackgroundService追踪执行阶段。 - MemoryBus/Event:在事件处理器中获取当前
Activity.Current,便于记录跨线程链路。 - 外部调用:为 HttpClient/数据库调用创建子 Activity,结合日志输出上下文。
延伸阅读: