ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 17:15:41  阅读:257  来源: 互联网

标签:logging nlog log4net 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
> …

标签:logging,nlog,log4net,c
来源: https://codeday.me/bug/20191111/2021467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有