使用静态 属性 返回 class 实例隐藏 NLog
Hiding NLog With static property returning class instance
我正试图从我的代码中摆脱对 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.Instance.Fatal(ex, ex.Message);
因此,NLog 的真正实现以某种方式对 Logger 的用户隐藏了。如果明天我需要使用 Log4net,我只需要更改我在 Logger class.
中的实现
这样做有什么潜在的问题吗?因为我看不到有人在任何地方这样做。或者有什么更好的方法吗?
我完全同意这些评论。你可能不需要切换到另一个日志记录库,如果你这样做,那是因为新库非常聪明并且以另一种方式工作,所以你无论如何都需要改变你的抽象。
如果你坚持要包裹你Common Logging .NET。它是几乎所有主要日志记录框架之上的抽象。这样就不用自己写抽象了。
我正试图从我的代码中摆脱对 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.Instance.Fatal(ex, ex.Message);
因此,NLog 的真正实现以某种方式对 Logger 的用户隐藏了。如果明天我需要使用 Log4net,我只需要更改我在 Logger class.
中的实现这样做有什么潜在的问题吗?因为我看不到有人在任何地方这样做。或者有什么更好的方法吗?
我完全同意这些评论。你可能不需要切换到另一个日志记录库,如果你这样做,那是因为新库非常聪明并且以另一种方式工作,所以你无论如何都需要改变你的抽象。
如果你坚持要包裹你Common Logging .NET。它是几乎所有主要日志记录框架之上的抽象。这样就不用自己写抽象了。