2012-02-11 15 views
0

私のC#プロジェクトでは、デバッグにlog4netを使用しています。しかし、リリースビルドでは、私はlog4netへの依存を取り除く必要があります。私はそれについて正しい方法が何であるか分かりません。リリースビルドでlog4netへの依存関係を削除するには?

#if DEBUG ... endifがコード内にあるのは非常に面倒です。デバッグモードまたはリリースモードでコンパイルすると、手動でlog4netへの参照を追加/削除する必要があります。

私が考えたもう1つの選択肢は、リリースビルドでモッククラスを使って "本当の" lotg4netを何とか切り替えることですが、どうすればよいか分かりません。

私の場合、リリースビルドでlog4netを削除する最も良い方法は何ですか?

+0

モックはテスト用です。その生産バージョンは、Inversion of ControlまたはDependency Injectionのラインに沿っている傾向があります。 –

答えて

3

M.Babcockの答えに沿って、あなたは依存性反転の後にいます。依存性注入コンテナを使用するには、必ずがあるわけではありませんが、ログを抽象化する必要があります。今

public static class Log 
{ 
    private ILog log = new NullLogger(); 

    public static void Assign(ILog log) 
    { 
     this.log = log; 
    } 

    public static void Debug(string message) 
    { 
     log.Debug(message); 
    } 

    // ...and other implementations... 
} 

あなたは:

このような何か:

public interface ILog 
{ 
    void Trace(string message); 
    void Debug(string message); 
    void Error(string message); 
    // and whatever you need 
} 

その後、あなたは異なる実装を持っている:

public class NullLog : ILog { ... } // does nothing --- all calls are empty 
public class Log4NetLog : ILog { ... } // initializes Log4Net and does logging 

あなたは、メインエントリポイントとして静的クラスを使用することができますがスタートアップコードでこれを結びつける必要があります。ここでは、コンテナを使用するか、条件付きコンパイルを使用できます。

#if DEBUG 
    Log.Assign(new Log4NetLogger); 
#endif 

これらは広いストロークです。私は自分のサービス・バスの一部として、いくつかのロギングインフラストラクチャコードを持っている:http://shuttle.codeplex.com/

のILog: http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure%2fLogging%2fILog.cs

NullLog: http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure%2fLogging%2fNullLog.cs

Log4NetLog: http://shuttle.codeplex.com/SourceControl/changeset/view/c49f328edd17#Shuttle.Core%2fsource%2fShuttle.Core.Infrastructure.Log4Net%2fLog4NetLog.cs

がお役に立てば幸いです。

3

ここでは依存性注入が最適です。ロギングライブラリを物理的な実装から抽象化するには、その間にDIコンテナを追加します(ロギングはDI/IoCとAOPのポスターの子の1つです)。ロギング設定を、リリースビルドで無視できる設定にオフロードします。あなたは頭痛の多くを救うでしょう。

関連する問題