web-dev-qa-db-ja.com

LogWriterが設定されているかどうかを確認するにはどうすればよいですか?

Enterprise Library4から6にアップグレードした後に最近ポップアップしたEnterpriseLibrary 6LogWriter例外を処理しようとしています。

私はどちらかを取得します:

LogWriterはLogger静的クラスに設定されていません。 Logger.SetLogWriterメソッドを呼び出して設定します。

OR

LogWriterはすでに設定されています。

...シナリオによって異なります。

問題は、InvalidOperationExceptionをスローすることです。これは一般的すぎて処理できないようであり、

if (Logger.Writer == null)

...また、例外が発生しますでは、ライターが設定されているかどうかをどのように確認しますか?

10
user919426

回答とコメントをありがとう。

プロジェクトのコードを調べたところ、これをサポートするものが組み込まれていないことがわかりました。

プロジェクトはもう開発中ではありませんが、私はチャンスをつかんで 機能リクエスト を投稿しました。

この要件を達成するための最良のシナリオは フォークする それをダウンロードし、チェックを行うロジックを追加し、特定の例外を追加で定義します(機能リクエストを参照)。

LogWriterNotSetExceptionおよびLogWriterAlreadySetException

[〜#〜]編集[〜#〜]

ライセンスに影響するため、フォークを削除しました。 Logging ApplicationBlockの所有権は譲渡されていません。 nityとPrismのみが転送されました

nityの将来に関する通知へのコメント によると、P&Pメンバーから:

Logging Application Blockについては、Semantic Logging(以前のSemantic Logging Application BlockまたはSLAB)に取って代わられると考えています。

https://github.com/mspnp/semantic-logging

つまり、Logging Application Blockに取り組むつもりはなく、新しい所有者に譲渡する予定もありません。

したがって、新しいことに取り組んでいる人にとって最善の策は、試してみることです セマンティックロギング

1
user919426

このCodePlexの議論 によると、

エンタープライズライブラリのブーストラッピング動作はバージョン6で変更されました。静的ロガーファサードへの影響は、内部LogWriterを設定する必要があることです(たとえば、アプリケーションの起動時)

Webアプリケーションのシナリオを使用している場合は、Application_Start()が適切な方法です。

_protected void Application_Start()
{
    Logger.SetLogWriter(new LogWriterFactory().Create());
}
_

それ以外の場合は、Main()メソッド(またはその周辺のどこか-たとえば、コンテナーの初期化中)で設定します。

4
Anton Gogolev