C#库的可选日志依赖项?

C#库的可选日志依赖项?,c#,.net,logging,log4net,C#,.net,Logging,Log4net,我一直在使用C#开发一个库,并希望为它提供自动记录所有异常的功能。理想情况下,我希望它使用log4net,从而允许客户机以自己喜欢的方式配置日志(即,他们可以将日志重定向到事件日志或数据库或您拥有的其他内容) 但是,如果他们选择不使用日志功能,我希望避免日志依赖。这可行吗 换句话说,根据客户端在配置文件中设置的内容,是否有一种方式可以选择使用log4net依赖关系?显而易见的答案是使用带有自定义TraceSource的System.Diagnostics.Trace子系统。这样,您就可以在配置文

我一直在使用C#开发一个库,并希望为它提供自动记录所有异常的功能。理想情况下,我希望它使用log4net,从而允许客户机以自己喜欢的方式配置日志(即,他们可以将日志重定向到事件日志或数据库或您拥有的其他内容)

但是,如果他们选择不使用日志功能,我希望避免日志依赖。这可行吗


换句话说,根据客户端在配置文件中设置的内容,是否有一种方式可以选择使用log4net依赖关系?

显而易见的答案是使用带有自定义
TraceSource的
System.Diagnostics.Trace
子系统。这样,您就可以在配置文件中设置所需的任何
TraceListener
,包括log4net、EventLog、文本文件、
Console
或XML文件


如果添加了log4net
TraceListener
,那么依赖项将在运行时加载,而不是在中编译。
跟踪
子系统从一开始就变得非常强大,我建议您研究一下。

您可以使用.NET中内置的跟踪子系统-它是配置控制的


我自己不会添加依赖项—只需通过跟踪API发出消息—客户机可以决定如何记录它们(如果他们愿意)。

我个人更喜欢Log4Net API,而不是
System.Diagnostics.Trace提供的API

因此,我有自己的抽象层,它使用提供者模型设计模式,并公开类似于log4net的API。然后,我可以插入一个log4net提供程序,但将来可以用另一个提供程序(例如System.Diagnostics.Trace;EntLib)替换它

实现非常类似于


这样,应用程序就不会直接依赖于底层的日志记录提供程序,如果您(或您的客户)有其他偏好,您可以轻松地切换到其他提供程序。

这听起来很有趣,我必须检查一下。谢谢