DiagnosticSource - DiagnosticListener - 仅适用于框架?

DiagnosticSource - DiagnosticListener - For frameworks only?

.NET Core 中有一些新的 类 用于跟踪和分布式跟踪。请参阅此处的降价文档:

https://github.com/dotnet/corefx/tree/master/src/System.Diagnostics.DiagnosticSource/src

作为应用程序开发人员,我们是否应该使用 DiagnosticListener 实例在我们的代码中检测事件,例如销售或库存消耗等,然后订阅消息并将消息路由到某些指标存储或允许应用程序之类的工具自动订阅这些事件并将其推送到 AI 云的见解?

我们是否应该创建自己的指标收集抽象并将其 inject/flow 压入堆栈 "as per normal" 并假装我从未见过 DiagnosticListener

我有类似的需要将 "health events" 发布到 Service Fabric,我也可以使用 DiagnosticListener 个实例来解决(抽象)。

DiagnosticListener 打算将 library/app 与跟踪系统分离:即任何库都可以使用 DiagnosticSource` 通知任何消费者有关有趣的操作。

跟踪系统可以动态订阅此类事件并获取有关操作的广泛信息。

如果您开发应用程序并使用支持 DiagnostiListener 的跟踪系统,例如ApplicationInsights,您可以使用 DiagnosticListener 将您的代码与跟踪系统分离,或者直接使用它的 API。后者效率更高,因为没有额外的适配器将您的 DS 事件转换为 AppInsights/other 跟踪系统事件。您还可以更轻松地微调这些事件。

如果你真的想要这个抽象层,前者更好。 您可以将 AI 配置为使用任何 DiagnosticListener(通过指定 includedDiagnosticSourceActivities)。

如果您编写一个库并希望依赖平台上可用的某些东西,以便任何应用程序都可以使用它而无需带来新的额外依赖项 - DiagnosticListener 是您的最佳选择。

还要考虑到跟踪和指标收集是不同的,跟踪要重得多并且不假设任何聚合。如果您只想要 custom-metrics/events 而没有 in/out-proc 相关性,我建议您直接使用跟踪系统 APIs。