簡體   English   中英

使用靜態屬性隱藏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,

Logger.Instance.Fatal(ex, ex.Message);

因此,NLog的真正實現對Logger用戶而言是隱藏的。 如果明天我需要使用Log4net,則只需更改Logger類中的實現即可。

這樣做有潛在的問題嗎? 因為我看不到有人在任何地方這樣做。 還是有更好的方法?

我完全同意這些意見。 您可能不需要切換到另一個日志記錄庫,如果這樣做,是因為新的庫非常聰明,並且以另一種方式工作,因此無論如何您都需要更改抽象。

如果您堅持要包裝您的Common Logging .NET 它是幾乎所有主要日志記錄框架之上的抽象。 這樣,您無需自己編寫抽象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM