C# 企业日志记录不转换XML跟踪侦听器文件名规范中的环境变量
我正在使用Microsoft Enterprise Library 5.0可选更新1进行日志记录。我在app.config文件中声明了一个部分,如下所示:C# 企业日志记录不转换XML跟踪侦听器文件名规范中的环境变量,c#,enterprise-library,error-logging,enterprise-library-5,C#,Enterprise Library,Error Logging,Enterprise Library 5,我正在使用Microsoft Enterprise Library 5.0可选更新1进行日志记录。我在app.config文件中声明了一个部分,如下所示: <loggingConfiguration name="LLamasoftLoggingConfiguration" tracingEnabled="true" defaultCategory="General"> <listeners> <add name="
<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);
logWriter=Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current.GetInstance();
logWriter.Write(logEntry);
我将得到一个DirectoryNotFoundException,文本为:找不到路径'D:\Project\Application\bin\x86\Debug\%ALLUSERSPROFILE%\CompanyName\AppName\Diagnostics\ErrorLog.xml的一部分。
当我使用像'C:\ProgramData\CompanyName\AppName\Diagnostics\ErrorLog.xml'
这样的绝对路径时,它会工作
我看到许多参考文献说我应该能够在日志文件路径中使用环境变量,但是,无论我尝试哪种方式,它们都会附加到当前的执行目录路径中。参考资料还说,如果文件夹不存在,日志系统将创建该文件夹,但我必须确保它存在
这是我第一次使用EnterpriseLogging应用程序块,所以我不知道在不同版本之间行为是否发生了变化,也不知道这个应用程序是否有这些怪癖。目前,我已经将路径硬编码到app.config文件中,但对于最终版本,这应该是动态确定的
感谢您的建议。我希望在今天早上回去工作之前,能看到有人回答这个问题。看到没有答案,我想我会在这个问题上多花几分钟,因为我只有一个难闻的解决办法 我安装了随库提供的源代码(谢谢,Microsoft),构建了解决方案并检查了代码。简单的回答是,环境变量的扩展只会在提供给FlatFileTraceListener的文件名下发生。虽然基于文件的XmlTraceListener的使用似乎可以做同样的事情,但事实并非如此。没有环境变量的扩展,您将看到我上面描述的行为 如果要更改行为,请查看Logging.2010项目并检查TraceListener文件夹中的FlatFileTraceListener.cs和XmlTraceListener.cs代码。您将看到对助手的调用,
EnvironmentHelper.ReplaceEnvironmentVariables(字符串文件名)
,它与平面文件实现一起使用,而不是与xml(文件)实现一起使用。这看起来很容易改变
希望这能为其他人节省几个小时的时间。将最新的entlib 5.0版添加到您的解决方案中,就可以解决“在文件名中使用环境变量时不会扩展”的问题。我是通过以下方式下载的:
%USERPPROFILE%
字符串,并且我能够看到在userprofile文件夹中创建的日志文件