隐藏NLog与静态属性返回类实例
本文关键字:返回 实例 属性 静态 NLog 隐藏 | 更新日期: 2023-09-27 18:02:08
我正试图从我的代码中脱离对NLog的直接依赖。因此,如果将来我决定使用另一个日志库,这将是无痛的。我所做的如下:
internal class Logger
{
private NLog.Logger _NLogInstance;
internal static Logger Instance
{
get
{
return new Logger();
}
}
public Logger()
{
LogManager.ReconfigExistingLoggers();
_NLogInstance = LogManager.GetCurrentClassLogger();
}
public void Trace(string message)
{
_NLogInstance.Trace(message);
}
public void Debug(string message)
{
_NLogInstance.Debug(message);
}
public void Info(string message)
{
_NLogInstance.Info(message);
}
public void Warn(string message)
{
_NLogInstance.Warn(message);
}
public void Error(Exception ex, string message)
{
_NLogInstance.Error(ex, message);
}
public void Fatal(Exception ex, string message)
{
_NLogInstance.Fatal(ex, message);
}
}
如你所见,要使用我的Logger,你只需要这样做,
Logger.Instance.Fatal(ex, ex.Message);
所以,NLog的真正实现对Logger的用户是隐藏的。如果明天我需要使用Log4net,我只需要改变我在Logger类中的实现。
这样做有什么潜在的问题吗?因为我在任何地方都没见过有人这么做。或者有更好的方法吗?
我完全同意这些评论。你可能不需要切换到另一个日志库,如果你这样做,这是因为新的库是如此聪明,以另一种方式工作,为什么你需要改变你的抽象。
如果你坚持包装你的Common Logging . net。它是几乎所有主要日志框架之上的抽象。这样,您就不需要自己编写抽象了。