隐藏NLog使用静态属性返回类实例

时间:2016-08-11 10:21:39

标签: c# .net logging nlog

我试图打破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类中更改我的实现。

这样做有潜在的问题吗?因为我没有看到人们在任何地方这样做。还是有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

我完全赞同这些评论。你可能不需要切换到另一个日志库,如果你这样做,那是因为新库非常聪明并且以另一种方式工作,为什么你还需要改变你的抽象。

如果你坚持用Common Logging .NET包裹你。它是几乎所有主要日志框架之上的抽象。这样你就不需要自己编写抽象。