记录& “依赖倒置+抽象” - 关注点分离

时间:2017-02-26 19:31:33

标签: c# logging log4net nlog

由于那里有很多日志框架,我希望为每个应用程序编写一个抽象,以便控制我可以插入的日志框架。这意味着我在例如Log4Net或NLog上不可靠,但我提供了一个接口/抽象,然后在我自己的抽象中提供插件框架。

沿着这些方向的东西(有点简化的mayvbe),我可以传递给任何需要依赖的对象。

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或资源定位器注入/实例化,具体取决于我正在处理的应用程序的实现细节。

问题:我不知道是否一个好主意?从头开始写这个,考虑可能

  • 丢失记录框架内的上下文信息
  • 重新发明轮子
  • 表现命中

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

  • 如果操作正确,我可以切换出来,或者添加一个非常自定义的实现。
  • 之后我不需要触及已经存在并正在制作的课程内部,因此遵守可靠且特别开放/封闭的原则 - 引入更少的错误。

任何指南备注警告 DO& DONT - 或者可能对现有抽象的引用可能很方便,非常受欢迎!

谢谢, 伊夫

1 个答案:

答案 0 :(得分:3)

好吧,在我的热情中,我似乎已经瞥了一眼。我可能找到了一个适合我需求的库,我会在这里发布,以防有​​人在寻找类似的解决方案:Common Logging framework

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

<强>参考