0

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}&#xD;&#xA;Application Domain: {appDomain} | Machine: {machine}&#xD;&#xA;Extended Properties: {dictionary({key} - {value}&#xD;&#xA;)}&#xD;&#xA;Message: {message}&#xD;&#xA;Process Name: {processName}&#xD;&#xA;"
              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 &amp; Warnings">
        <listeners>
          <add name="Error Log TraceListener" />
        </listeners>
      </errors>
    </specialSources>
  </loggingConfiguration>
</configuration>

さて、私は問題をもう少し絞り込みました。私の ExceptionHandler クラスには「WriteToLog」というメソッドがあり、そのメソッド内には Logger.Write(LogEntry) があるようです。Logger はエンタープライズ ロガーであり、LogWriterFactory を作成しないと機能しません。LogWriterFactory には ConfigurationSource が必要です。

さて、問題は... ConfigurationSource または独自のカスタム ロガー、さらには構成ファイルの場所を ExceptionHandeler クラスに渡すにはどうすればよいですか?

4

2 に答える 2

0

私のロガーオブジェクトでは、最終的にGetExecutingAssemblyLocation を使用して構成ファイルを取得しました。

于 2013-03-20T12:51:38.783 に答える
0

私は Log4Net で同様の問題を抱えていましたが、構成とは何の関係もないことが判明しました。代わりに、ファイルが作成されるはずだったディレクトリに、ファイルを作成するための適切な権限がありませんでした。ファイルが作成されるディレクトリの NTFS アクセス許可に、適切なユーザーの読み取り、書き込み、および変更があることを確認します。

于 2013-01-29T18:42:35.797 に答える