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

时间:2011-09-15 18:27:15

标签: c# .net logging log4net

我一直在使用C#中的库,并希望提供自动记录所有异常的功能。理想情况下,我希望它使用log4net,从而允许客户端配置他们喜欢的日志(即他们可以将其重定向到EventLog或数据库或者你有什么)。

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

换句话说,根据客户端在配置文件中设置的内容,有没有办法可以选择具有log4net依赖关系?

3 个答案:

答案 0 :(得分:11)

显而易见的答案是将System.Diagnostics.Trace子系统与自定义TraceSource一起使用。这样,您可以在配置文件中设置任何您想要的TraceListener,包括log4net,EventLog,文本文件,Console或XML文件。

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

答案 1 :(得分:2)

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

我不会自己添加依赖项 - 只需通过跟踪API发出消息 - 客户端可以根据需要决定如何记录它们。

答案 2 :(得分:0)

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

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

实施与this one非常相似。

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