2016-08-11 6 views
0

私のコードからNLogの直接の依存関係を解消しようとしています。だから将来的に別のロギングライブラリを使うことに決めたら、それは無理でしょう。 私がやったことは NLogを非表示クラスプロパティを返す静的プロパティを使用

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

だから、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); 
    } 
} 

、1だけそうする必要が私のロガーを使用するには、以下の通りですLoggerのユーザー明日私はLog4netを使用する必要がある場合、私はLoggerクラスで実装を変更する必要があります。

このような問題はありますか?なぜなら、私はこれをやっている人々はどこにも見ないからです。それとももっと良い方法がありますか?

+0

「明日はLog4netを使用する必要があります。これはよく知られている反パターンです。あなたはそれを必要としません。 http://martinfowler.com/bliki/Yagni.html – Oscar

+0

@Oscar mind to more?私が見ることができるのは、私がこれをしなければ、私はNLogにしっかりとしているということです。 – Terrence

+0

だから?どうしたの?ログプロバイダを変更する機能は、ソフトウェアの実際の機能上の必要条件だと思いますか?ログプロバイダを切り替えるプロジェクトについて聞いたことがありますか? – Oscar

答えて

2

私はコメントに完全に同意します。あなたはおそらく別のロギングライブラリに切り替える必要はありません。新しいライブラリがとても巧妙で、別の方法で動作するため、とにかに抽象概念を変更する必要があるからです。

ラッピングをお勧めする場合は、代わりにCommon Logging .NETをご利用ください。これは、主要なロギングフレームワークのほとんどすべての上にある抽象です。このようにして、抽象化を自分で書く必要はありません。

+0

トマスとオスカーに感謝します。実際、Loggerを切り離そうとするのは技術者です。さらに、NLogはクラスごとに1つのロガーを持つことを推奨します。これは、アプリケーションごとに1つのロガーにする、それをラップする目的を敗北させます。しかし、ロガーについて忘れて、私はまだ私の質問の提案された実装が理にかなっているかどうかを知りたいです。ロガー以外のものにも使用できますか?私はこれを答えにするつもりです。ありがとう – Terrence

+0

@テランスそれは理にかなっています。パフォーマンスメトリックなどの他のものをログに記録したい場合は、そのクラスもそのクラスを含めることができます。しかし、私はあなたがすぐにそのような単一の責任を破るときに問題にぶつかると思います。異なる責任のために別々のクラスを持つ方がよい。 – ThomasArdal

関連する問題