ログに 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 ファイルにハードコードしましたが、最終バージョンでは動的に決定する必要があります。
提案をいただければ幸いです。