2012-02-10 28 views
0

私は反射でプラグインモジュールをロードしているアプリケーションを持っています。私のようなコードでロガーを取得log4net - アセンブリのための異なるログファイル

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs\xxx.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="1MB" /> 
    <staticLogFileName value="true" /> 
    <threshold value="DEBUG" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" /> 
    </layout> 
</appender> 

: アプリケーションのようにはapp.configにlog4netのログ・アペンダを定義している今

private static readonly ILog log = LogManager.GetLogger(typeof(Indexer)); 

、私は宣言するための方法を探していますリフレクションを使用してPlugInとしてロードされる各モジュール(アセンブリ)の異なるログファイル。

最初の問題は、モジュールがBusiness-Library-Classesを(すべてのモジュールで使用されているアセンブリ内に)一緒に使用していることです。これもログエントリを生成します。このエントリは、モジュールのログファイルにも挿入する必要があります。

第2の問題は、開発時にモジュールがわからないことです。だから私はapp.configにいくつかの設定を挿入することはできません。

+0

異なるアセンブリから同じインスタンスメソッドが呼び出された場合、プライベートロガーは別のログファイルに書き込むことを望みますか?それは不可能です。とにかくこれをやっているのはなぜですか?単なるトラブルシューティング以外の目的でロギングを使用しているようです。 – Groo

+0

@Groo - いいえ、異なるアセンブリから使用されるインスタンス(ただし同じクラス)は異なります。 – BennoDual

+0

しかし、それらは同じappdomain(単一のアプリケーション)内の異なるアセンブリから使用されますか?ロガーが 'static'フィールドで参照されている場合は、一つのロガーインスタンスがあります。 – Groo

答えて

2

第2の問題は、開発時にモジュールがわからないことです。だから私はapp.configにいくつかの設定を挿入することはできません。

これは、設定ファイルでは不可能である可能性があることを示しています。新しいプラグインを追加すると、プラグインの新しいアペンダーを追加するコードを追加できます。

ハーズは、いくつかの(code)あなたがインスピレーションを得るために:

// Setup RollingFileAppender 
    log4net.Appender.RollingFileAppender fileAppender = new log4net.Appender.RollingFileAppender(); 
    fileAppender.Layout = new log4net.Layout.PatternLayout("%d [%t]%-5p %c [%x] - %m%n"); 
    fileAppender.MaximumFileSize = "100KB"; 
    fileAppender.MaxSizeRollBackups = 5; 
    fileAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size; 
    fileAppender.AppendToFile = true; 
    fileAppender.File = fileName; 
    fileAppender.Name = "XXXRollingFileAppender"; 
    log4net.Config.BasicConfigurator.Configure(fileAppender); 

あなたは唯一のプラグインアセンブリからあなたがログインして、おそらくすでにRollingFileAppenderを設定からそれらを省略したいされていることを追加する必要があります。

関連する問題