Enterprise Library4から6にアップグレードした後に最近ポップアップしたEnterpriseLibrary 6LogWriter例外を処理しようとしています。
私はどちらかを取得します:
LogWriterはLogger静的クラスに設定されていません。 Logger.SetLogWriterメソッドを呼び出して設定します。
OR
LogWriterはすでに設定されています。
...シナリオによって異なります。
問題は、InvalidOperationException
をスローすることです。これは一般的すぎて処理できないようであり、
if (Logger.Writer == null)
...また、例外が発生しますでは、ライターが設定されているかどうかをどのように確認しますか?
回答とコメントをありがとう。
プロジェクトのコードを調べたところ、これをサポートするものが組み込まれていないことがわかりました。
プロジェクトはもう開発中ではありませんが、私はチャンスをつかんで 機能リクエスト を投稿しました。
この要件を達成するための最良のシナリオは フォークする それをダウンロードし、チェックを行うロジックを追加し、特定の例外を追加で定義します(機能リクエストを参照)。
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に取り組むつもりはなく、新しい所有者に譲渡する予定もありません。
したがって、新しいことに取り組んでいる人にとって最善の策は、試してみることです セマンティックロギング
このCodePlexの議論 によると、
エンタープライズライブラリのブーストラッピング動作はバージョン6で変更されました。静的ロガーファサードへの影響は、内部
LogWriter
を設定する必要があることです(たとえば、アプリケーションの起動時)
Webアプリケーションのシナリオを使用している場合は、Application_Start()
が適切な方法です。
_protected void Application_Start()
{
Logger.SetLogWriter(new LogWriterFactory().Create());
}
_
それ以外の場合は、Main()
メソッド(またはその周辺のどこか-たとえば、コンテナーの初期化中)で設定します。