2

Log4Net を使用して、WPF アプリケーションでログを処理しています。

現在、ロガーは残りのフロントエンド コードで構成されています。これらの層でロガーを使用できるようにするには、サービス層とリポジトリ層への参照を渡す必要があります (実際には、これには StructureMap を使用します)。これは、バックエンドがフロントエンドに依存していることを意味し、私はそれが好きではありません。

これをどのように処理するのが最善か疑問に思っています。リポジトリ レイヤーでロガーを構成する必要がありますか?

4

2 に答える 2

4

log4net LogManager.GetLogger(string name)は、既存のロガー インスタンスが既に作成されている場合 (たとえば、別のレイヤーで) を返すため、ロガー オブジェクトを渡す必要はありません。

複数のスレッド/プロセスが同時に同じログ ファイルに書き込もうとしていることに注意する必要があります。log4net MinimalLock を使用するか、このサードパーティのソリューションを試すことができます。どちらも理想的ではありません (codeproject のものは非効率的であり、依然として並行性の問題が発生します)。私は自分で書くことになりました(残念ながら公開されていません)。

于 2012-04-10T15:47:24.027 に答える
1

ロギングは、いくつかの異なる方法で処理されているのを見てきました。最も簡単な方法は、すべてのレイヤーで共有される共通アセンブリに存在する静的クラスを作成することです。

ただし、IoC に StructureMap を使用しているため、作成された各インスタンスにロガー クラス (必要に応じてシングルトンとして構成される場合があります) を挿入するように StructureMap を構成することをお勧めします。個人的には、コンストラクターが雑然としないように、このような分野横断的な懸念クラスにはプロパティ インジェクションを好みますが、それは好みの問題です。

于 2012-04-10T15:51:28.877 に答える