Enterprise Library 3.1 を使用して、独自のカスタム リスナーを使用して外部ファイルに例外を記録しています。最近、カスタム リスナーを使用するクラス ライブラリを作成する必要がありましたが、このクラス ライブラリはベンダー アプリケーションから呼び出されるため、ベンダーの構成ファイルを制御できません。次の記事を使用して、組み込みの Enterprise Library リスナーで例外をログに記録しましたが、カスタム トレース リスナーを使用しようとすると機能しません。エラーは表示されません。ファイルが作成されないだけです。カスタム リスナーをベンダー構成リスナー セクションに追加すると、すべて正常に動作します。
私の最初の考えは、ExceptionPolicyFactory は正しい外部構成ファイルをロードしていますが、ファクトリは外部構成のリスナー セクションから「タイプ」を読み取っていないということです。
カスタムリスナーを使用するときに「リスナー」セクションを外部構成ファイルに完全に移動する方法について、誰かが私を正しい方向に向けるのを助けることができますか?
Entlib と相互運用性: 動作しますか? 構成ファイルはどこに保存されますか? http://blogs.msdn.com/b/tomholl/archive/2006/04/02/entlib2externalconfig.aspx http://hugoribeiro.blog.com/2009/05/15/no-configuration-enterprise-library/
基本的に、このセクションは外部構成ファイルに移動する必要があります。
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1" />
</configSections>
<loggingConfiguration name="Logging Application Block" tracingEnabled="false"
defaultCategory="Error Category" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add fileName="C:\LOGS\Error.log" listenerDataType="Test.Logging.Configuration.TestTraceListenerData, Test.Logging, Version=1.5.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
traceOutputOptions="None" type="Test.Logging.TraceListeners.TestTraceListener, Test.Logging, Version=1.5.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
name="Error Log TraceListener" />
</listeners>
<formatters>
<add template="Timestamp: {timestamp}
Application Domain: {appDomain} | Machine: {machine}
Extended Properties: {dictionary({key} - {value}
)}
Message: {message}
Process Name: {processName}
"
type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=3.1.0.0, Culture=neutral, PublicKeyToken=fe5b8e7d42f3f6e1"
name="Error Detail Text Formatter" />
</formatters>
<specialSources>
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Error Log TraceListener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>
</configuration>
さて、私は問題をもう少し絞り込みました。私の ExceptionHandler クラスには「WriteToLog」というメソッドがあり、そのメソッド内には Logger.Write(LogEntry) があるようです。Logger はエンタープライズ ロガーであり、LogWriterFactory を作成しないと機能しません。LogWriterFactory には ConfigurationSource が必要です。
さて、問題は... ConfigurationSource または独自のカスタム ロガー、さらには構成ファイルの場所を ExceptionHandeler クラスに渡すにはどうすればよいですか?