2

次のシナリオがあります: 1. .NET UI 側は Logging App Block を使用してフラット ファイルに書き込みます 2. アンマネージド Windows サービスは独自のロガーを使用して 1 と同じファイルに書き込みます。

質問: エントリがログに記録されると、FlatFile TraceListener がそのファイル ハンドルを閉じて、Windows サービスもファイルに書き込むことができるようにする方法はありますか?

ありがとう!

更新: Microsoft.Practices.EnterpriseLibrary.Logging.Logger.Writer.Dispose(); を含めました。これでストリームが閉じられるので、これでうまくいきます。これを行う別の方法があるかどうかは興味深いことです。

Update2: ファイナルノート

P&P は、複数のアプリケーションから単一の MSMQ に書き込むことを提案しています。これにより、Dispose() などを呼び出す必要がなくなります。

4

3 に答える 3

2

log4netを使用してこれに対処する必要がありました。ロギング フレームワークのファイル ロギング サポートをまったく利用できず、共有違反をキャッチする独自のログ アペンダーを作成する必要がありました。その時点で、イベントをメモリにバッファリングして後で書き出すか、ファイルにアクセスできるようになるまでブロックするかを選択できます。

于 2009-01-21T23:02:34.163 に答える
0

あなたの選択がそれを処理するための最良の方法だと思います.完了したらライターを破棄するだけです.これにより、ライターがまだ保持しているすべてのリソースが終了して解放されます.

また、両方の処理が同時に書き込もうとして例外が発生することも心配ですが、おそらく App Block にはそのための回避策のコードが組み込まれています。

于 2009-01-21T22:49:16.063 に答える
0

.Dispose はどこから取得しますか? EnterpriseLibrary.Logging.Logger.Writer を入力しますが、.Writer はメソッドまたはプロパティではなく、.Dispose ではありません。

ありがとう、

TCW

それを見つけた :

Microsoft.Practices.EntLib.Common をインポートするとうまくいきます。

于 2010-08-10T14:34:03.190 に答える