あなたは車輪の再発明を試みていると思います。コードからロガーフレームワークを切り離してコードからロガーを抽象化するためのツールがいくつかあります。
http://slf.codeplex.com/
http://netcommon.sourceforge.net/
これらは、.Netアプリケーションで最も一般的です。
さて、あなたがあなた自身の抽象化(これは有効です)を使うことを主張するなら、これは私の提案です:
まず第一に、私はあなたが次のようなものを持っていると思います:
interface ILogger
{
void Debug(string message);
void Info(string message);
void Warn(string message);
…..
}
さて、あなたのコードでは、次のように、ロガーのシングルトン参照を挿入します。
x.For<ILogger>().Singleton().Use<MyLogger>();
さて、私は通常、設定より規約を好みますが、ロガーの場合、コードが本番環境にあるときに、ロガーを無効または有効にしてロギングルールを変更したい場合があるため、設定ファイルによる設定は大きな利点です。ログレベル、および名前付きロガーを有効/無効にします。
これを達成するために私が見つけた最も簡単で再利用可能な方法は、コメントしたように構成を外部ファイルに配置することです。その後、コードを呼び出す必要はありませんXmlConfigurator
。いくつかのアプリケーション設定を追加するだけの方が簡単だからです。このような設定ファイル
<!-- Relative to the application root path -->
<add key="log4net.Config" value="Logger.log4net"/>
<add key="log4net.Config.Watch" value="True"/>
それでおしまい。これらのアプリケーション設定はlog4net構成をオーバーライドし、保守が容易です。構成ファイルは次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<!-- This section contains the log4net configuration settings -->
<log4net>
<!-- Define some output appenders -->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<file value="webapp-log.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
より多くのアペンダーを構成するには:ここをクリックしてください
プロジェクトでは、ロガー抽象化コンポーネントへの参照のみが必要です。Webプロジェクト(またはWindowsアプリケーション、同じ)で、log4net構成ファイルとそれらのアプリケーション設定のみを追加します。
再利用可能なコンポーネントを作成しているので、組織内に内部Nugetサーバー(単なるIISアプリケーション)をセットアップし、それを使用してコンポーネント(この場合はロガーを含むライブラリ)を展開することをお勧めします。また、アプリケーション設定とlog4net構成ファイルのみを含む別のNugetパッケージを作成して、このNugetパッケージをWebプロジェクトにのみインストールできるようにするとよいでしょう。