我试图打破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类中更改我的实现。
这样做有潜在的问题吗?因为我没有看到人们在任何地方这样做。还是有更好的方法吗?
答案 0 :(得分:2)
我完全赞同这些评论。你可能不需要切换到另一个日志库,如果你这样做,那是因为新库非常聪明并且以另一种方式工作,为什么你还需要改变你的抽象。
如果你坚持用Common Logging .NET包裹你。它是几乎所有主要日志框架之上的抽象。这样你就不需要自己编写抽象。