gpt4 book ai didi

c# - 企业日志记录不翻译 XML 跟踪监听器文件名规范中的环境变量

转载 作者:太空宇宙 更新时间:2023-11-03 14:06:52 24 4
gpt4 key购买 nike

我正在使用 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' 这样的绝对路径时,它起作用了。

我看到许多引用资料说我应该能够在日志文件路径中使用环境变量,但是无论我尝试哪种方式,它们都会附加到当前执行目录路径中。引用资料还说,如果文件夹不存在,日志系统将创建该文件夹,但我必须确保它存在。

这是我第一次使用 Enterprise Logging 应用程序 block ,所以我不知道版本之间的行为是否发生了变化,以及这个版本是否只有这些怪癖。目前,我已将路径硬编码到我的 app.config 文件中,但对于最终版本,这应该是动态确定的。

感谢建议。

最佳答案

我希望在今天早上回到工作之前看到有人回答了这个问题。看到没有答案,我想我会多花几分钟来解决这个问题,因为我只有一个糟糕的解决方法。

我安装了库提供的源代码(谢谢微软),构建了解决方案并检查了代码。简短的回答是,环境变量的扩展只会发生在提供给 FlatFileTraceListener 的文件名中。虽然期望基于文件的 XmlTraceListener 用法会做同样的事情似乎是合理的,但事实并非如此。如果不扩展环境变量,您将看到我上面描述的行为。

如果您想更改行为,请查看 Logging.2010 项目并检查 TraceListeners 文件夹中的 FlatFileTraceListener.cs 和 XmlTraceListener.cs 代码。您将看到对帮助器 EnvironmentHelper.ReplaceEnvironmentVariables(string fileName) 的调用,该调用与平面文件实现一起使用,而不与 xml(文件)实现一起使用。这看起来很容易改变。

希望这能为其他人节省几个小时的时间。

关于c# - 企业日志记录不翻译 XML 跟踪监听器文件名规范中的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com