c#-日志记录和“依赖倒置抽象”-关注点分离

由于那里有很多日志记录框架,因此我希望为每个应用程序编写一个抽象,以便控制可以插入哪个日志记录框架.这意味着我在Log4Net或NLog等方面并不可靠,但是我提供了一个接口/抽象,然后以自己的抽象形式提供了插件框架.

遵循这些原则(可能有些简化),我可以将其传递给需要依赖的任何对象.

interface ILogger {
    void LogMessage(string message, Severity severity);
    void LogDebug(string message);
    void LogInfo(string message);
    void LogWarning(string message);
    void LogError(string message);
    void LogFatal(string message);
}

之后,我的计划是为我想使用的日志记录框架编写适配器/实现-因此我将能够在必要时插入任何其他日志框架.

public sealed class Log4NetLogger : ILogger {
   /// Implementation and Log4Net specifics here
}
public sealed class NlogLogger : ILogger {
   /// Implementation and Log4Net specifics here
}

然后,我将通过IoC或资源定位器注入/实例化这些,具体取决于我正在处理的应用程序的实现细节.

问题:我不知道这是一个好主意吗?从头开始写这个,考虑也许

>日志框架中包含的上下文信息丢失
>重塑车轮
>性能受到冲击

另一方面,对我来说,好处是:

>如果操作正确,我将可以退出,或添加一个非常自定义的实现.
>之后,我就不需要再接触已经存在且正在生产中的类的内部结构,从而符合坚实的,尤其是开放/封闭的原则-引入的bug更少.

DO的任何指导,备注和警告不要-也许引用现有抽象可能会很方便,非常欢迎!

谢谢,
伊夫

解决方法:

好吧,我似乎满腔热情地瞥了一眼.我可能已经找到了适合我需要的库,如果有人在寻找类似的解决方案,我将在此处发布:Common Logging framework.

是什么
提供简单的日志记录抽象,以在不同的日志记录实现之间进行切换.当前支持log4net,NLog,Microsoft Enterprise Library日志记录,Microsoft Application Insights,Microsoft Windows事件跟踪和Serilog.另外,Common.Logging附带了一组基类,使轻松集成任何日志系统变得容易. 〜取自他们的official github repo.

参考文献:

> http://net-commons.github.io/common-logging/
> https://github.com/net-commons/common-logging
>控制台快速入门:https://github.com/net-commons/common-logging#console-quickstart
> NLog快速入门:https://github.com/net-commons/common-logging#nlog-quickstart
> …

上一篇:c#-Simple Injector是否可以结合TypeFactoryContext向实例工厂注册?


下一篇:我如何设置log4net记录某些事件,如果它们在每个时间范围内发生/发生了N次以上?