gpt4 book ai didi

c# - 日志记录和 "Dependency Inversion + Abstraction"- 关注点分离

转载 作者:太空狗 更新时间:2023-10-30 01:14:37 26 4
gpt4 key购买 nike

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

沿着这些线的东西(有点简化 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 或资源定位器注入(inject)/实例化,具体取决于我正在处理的应用程序的实现细节。

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

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

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

  • 如果操作正确,我将能够退出或添加一个非常自定义的实现。
  • 之后我不需要触及已经存在和正在生产的类的内部结构,因此遵守了可靠的,尤其是开放/封闭的原则 - 引入更少的错误。

任何指导评论警告做和不做的——或者对现有抽象的引用可能很方便,非常受欢迎!

谢谢,伊夫

最佳答案

好吧,一时兴致勃勃的我好像扫了一眼这个。我可能已经找到适合我需要的库,我会在这里发布它以防有人在寻找类似的解决方案:Common Logging framework .

什么是提供一个简单的日志记录抽象来在不同的日志记录实现之间切换。目前支持 log4net、NLog、Microsoft Enterprise Library 日志记录、Microsoft Application Insights、Microsoft Event Tracing for Windows 和 Serilog。此外,Common.Logging 带有一组基类,使任何日志系统的集成变得轻而易举。 ~ 来自他们的 official github repo .

引用资料:

关于c# - 日志记录和 "Dependency Inversion + Abstraction"- 关注点分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com