隐藏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类中的实现。

这样做有什么潜在的问题吗?因为我在任何地方都没见过有人这么做。或者有更好的方法吗?

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

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

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