c# – 如何在.NET中以SOLID方式实现库级跟踪和诊断?

在创建专为在更大范围内重用而设计的企业库时,我经常发现自己因实施跨领域设计问题而陷入困境,因为这些问题很难实现.今天,我一直在分析在可重用的企业库中进行跟踪和诊断的最佳方法.

看看.NET的BCL,似乎日志和诊断是框架的一个重要组成部分.

> System.Diagnostics具有Trace系列类型,用于执行跟踪,并且具有app.config友好的源代码和订阅(对于侦听器.)话虽如此,我倾向于讨厌app.config,而是松散地避免带有魔法配置字符串的类型漫游.
> System.Diagnostics.Tracing具有EventSource类型系列,用于基于事件的诊断.这是我的类型,但我不清楚是否以及如何在库中使用它,因为日志策略是应用程序的关注点而不是域库.

一个对我有意义的可能性是简单地在我的基础域库中定义一些常见的日志记录接口,并允许应用程序通过某种环境上下文模式注入实现,但是为此定义我自己的日志记录类型似乎是不必要的.

最佳答案

One possibility that makes sense to me is to simply define in my foundation domain library some common logging interfaces.

这是对的.您还必须创建一个默认的记录器实现,该实现可能针对例如系统诊断跟踪类(如果此库的消费者应用程序打开了跟踪).

allow applications to inject implementations via some sort of ambient context pattern

而不是挣扎于其他人如何注入记录器只是提供一种方式,例如自定义工厂注入执行logger接口.

工厂将负责在库中提供实例.如果提供了实现,则使用该实现,否则默认实例将用作默认记录器.您可以查看EF7 library(logging)的记录器基础结构.

点赞