27

ホストとプラグ可能なモジュール (プラグイン) で構成されるアプリケーションがあります。

ホストおよび他の各モジュールに対して log4net を構成できるようにしたいと考えています。それぞれに独自の構成ファイルが必要であり、それぞれが異なるファイルにログを記録します。

ホストだけが App.config ファイルを持っています。プラグインには、log4net 構成セクションを含む独自の構成ファイルがあります。

プラグインの 1 つから XmlConfigurator.Configure を呼び出すと、ホストの app.config log4net 定義がオーバーライドされます。

構成を上書きする代わりに追加する簡単な方法はありますか?

ありがとう、ガイ。

4

3 に答える 3

16

あなたに合った解決策をすでに見つけているようです。ただし、「より理想的」と思われる別の解決策を見つけたので、将来この質問を見つける可能性のある人のためにここに投稿します。

log4net には、個別に構成できるリポジトリと呼ばれる概念があります。あまり人気がなく、十分に文書化されているわけでもありませんが、私が見つけたいくつかの文書を次に示します。

http://logging.apache.org/log4net/release/manual/repositories.html

とにかく、あなたがする必要があるのはRepositoryAttribute、そのプラグインに固有のリポジ​​トリ名を持つプラグイン アセンブリまたはアセンブリに追加することだけであり、log4net はそれを他のすべてのものから分離します。

于 2010-06-30T14:49:17.753 に答える
4

さらに別の方法は、複数の場所に複数の log4net 構成ファイルを配置し、それらをすべてロードしてXDocument1 つの構成ファイルを効果的に作成し、XmlConfigurator.Configure()を呼び出すことです。私がこれを行った方法は、構成の XSD に従って各ファイルを作成し、各ファイルのlog4netルート ノードのすべての子を個別のインスタンスにロードし、それらをルート ノードをXElement持つ新しいインスタンスにマージすることでした。誰かがさらに興味を持っている場合は、この回答をコードで更新します (現時点では私の前にはありません)。XDocumentlog4net

ファイルを見つけることは別の問題です。ある種の規則を使用してファイルをスキャンし (例: *.dll.log4net.config)、それらをアセンブリに埋め込むなどします。

このようなコードの実装は、次の場所にあります。

www.kopf.com.br/kaplof/using-multiple-configuration-files-with-log4net

于 2010-07-23T18:38:18.187 に答える
2

私は自分でこの問題に遭遇しました。「理想的」とは言えませんが、現在のところ、クラスのConfigureAndWatchメソッドを使用するのが最善の解決策だと思います。XmlConfigurator基本的に、特定の構成ファイルを使用して、ホスト アセンブリに log4net 構成をセットアップさせます。プラグインがロードされたら、同じ構成ファイルの log4net 構成セクションに構成要素を書き込むようにします。log4net は でそのファイルの変更を監視するように指示されているためConfigureAndWatch、ファイルに新しいデータが追加されると、log4net はプラグインからの構成要素を含む構成をリロードします。

これは少しハックですが、うまくいくようです。もちろん、次のステップでは、これをロギング フレームワークに移動して、構成ファイルへのアクセスが統合されるようにします。

プラグインの構成が書き込まれ、保存されてから、更新された構成がリロードされてロガー リポジトリに適用されるまでには、少し時間がかかることに注意してください。

于 2010-05-06T18:32:26.300 に答える