2

ログに Microsoft Enterprise Library 5.0 Optional Update 1 を使用しています。次のように、app.config ファイルに宣言されたセクションがあります。

  <loggingConfiguration name="LLamasoftLoggingConfiguration" tracingEnabled="true"       defaultCategory="General">
        <listeners>
          <add name="XML Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.XmlTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
              listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.XmlTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
              fileName="%ALLUSERSPROFILE%\CompanyName\AppName\Diagnostics\ErrorLog.xml" traceOutputOptions="None" />
        </listeners>
    ...
  </loggingConfiguration>

アプリケーションを実行してロギングの使用に取り掛かると、たとえば、

  logWriter = Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
  logWriter.Write(logEntry);

次のテキストを含む DirectoryNotFoundException を取得します: パスの一部が見つかりませんでした'D:\Project\Application\bin\x86\Debug\%ALLUSERSPROFILE%\CompanyName\AppName\Diagnostics\ErrorLog.xml'.

絶対パスを使用する'C:\ProgramData\CompanyName\AppName\Diagnostics\ErrorLog.xml'とうまくいきます。

ログ ファイル パスで環境変数を使用できるようにする必要があるという参照が多数見られますが、どれを試しても、現在の実行ディレクトリ パスに追加されます。参照には、存在しない場合はログシステムがフォルダーを作成するとも書かれていますが、存在することを確認する必要があります。

これは、エンタープライズ ロギング アプリケーション ブロックを初めて使用するため、バージョン間で動作が変更されたのかどうか、これにはこれらの癖があるだけなのかどうかはわかりません。今のところ、パスを app.config ファイルにハードコードしましたが、最終バージョンでは動的に決定する必要があります。

提案をいただければ幸いです。

4

2 に答える 2

2

今朝仕事に戻る前に、誰かが質問に答えてくれることを期待していました。答えが見当たらなかったので、この問題についてあと数分だけ時間を割こうと思ったのです。

ライブラリに付属のソース コードをインストールし (Microsoft に感謝)、ソリューションを構築し、コードを調べました。簡単に言えば、環境変数の展開は、FlatFileTraceListener に提供されたファイル名でのみ発生します。XmlTraceListener のファイルベースの使用法が同じことを行うことを期待するのは合理的に思えますが、そうではありません。環境変数を展開しないと、上で説明したような動作が見られます。

動作を変更する場合は、Logging.2010 プロジェクトを調べて、TraceListeners フォルダー内の FlatFileTraceListener.cs および XmlTraceListener.cs コードを調べます。EnvironmentHelper.ReplaceEnvironmentVariables(string fileName)xml (ファイル) 実装ではなく、フラット ファイル実装で使用されるヘルパー への呼び出しが表示されます。簡単に変更できそうです。

他の誰かが数時間の時間を節約できることを願っています。

于 2012-02-02T16:07:51.347 に答える