由于那里有很多日志记录框架,因此我希望为每个应用程序编写一个抽象,以便控制可以插入哪个日志记录框架.这意味着我在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
> …