为C#库定义TraceSource日志记录配置

时间:2014-04-29 02:23:19

标签: c# logging tracesource

我正在开发几个库,我打算使用TraceSource在其中实现一些诊断跟踪。我还想允许用户附加/配置他们自己的监听器,交换机,过滤器等。

由于库不附带配置文件,是否有任何现有模式可以完美地完成此操作?

我一直在考虑以下问题:有一个随库提供的logging.config文件和show-cases我的库使用但不包含任何侦听器的源。接下来,在我的库中,我将从用户的logging.config和app.config中读取这两个内容,并使用app.config文件中定义的任何侦听器覆盖logging.config。这听起来像一个好的模式吗?

1 个答案:

答案 0 :(得分:0)

允许app.config(或web.config)的System.Diagnostic部分指向外部文件,例如

<system.diagnostics configSource="system.diagnostics.config" />

据我所知,system.diagnostics设置为只允许一个system.diagnostics部分,而不是两个合并的部分。使用ad hoc日志记录系统可能是可能的。 (我假设这是关于System.Diagnostic的跟踪库,因为你有一个TraceSource标签。

因此,您将使用具有不同侦听器方案的几个.config文件发送您的库(可能是用于控制台跟踪的预先配置的部分或跟踪到文件)。用户只需要将configSource添加到他们的app.config中以查看跟踪,这是典型的情况 - 临时添加跟踪来处理特定问题。

如果库的消费者足够复杂,想要查看第三方库的痕迹,他们也可以根据自己的需要配置自己的system.dignostics部分,只需要以某种方式(通过文档) )让用户知道您正在使用System.Diagnostics以及TraceSource名称是什么。

例如,.NET框架在少数名称空间(System.ServiceModel和System.Networking)中使用TraceSource,但除非您运行反编译器,否则您可能永远不会意识到这样的跟踪存在并且可以由库用户激活。换句话说,库中的System.Diagnostic跟踪具有可发现性问题。