如何在Windows XP和7上配置log4net以写入%LOCALAPPDATA%?

bsh*_*ett 7 log4net environment-variables

我有一个使用log4net进行日志记录的内部应用程序.我想要生成日志%LOCALAPPDATA%\Vendor\App\application.log.不幸的是,log4net正在创建日志文件%APPDATA%.这不是一个大问题,因为我们真的不在这里使用漫游配置文件,但我不喜欢在我的代码中留下一点特质,如果我可以避免它.

有关如何将文件写入我指定的位置而不用编程配置log4net并使用pinvoke获取XP路径的任何想法?

如果有任何帮助,这是我的配置文件的appender部分:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="${LOCALAPPDATA}\Vendor\App\application.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="100KB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger%newline%message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

sgm*_*ore 8

如果这不起作用,则意味着您的环境变量是错误的.

Log4net没有任何特殊功能来处理appdata或localappdata.它所做的就是调用System.Environment.GetEnvironmentVariables()来返回一个哈希表,并根据返回的值执行替换.


小智 6

很晚才来这里参加聚会,但是我碰到了这个,才找到了答案。

似乎可以使用log4net.Util.PatternString将环境变量插入文件路径。因此,OP的示例变为:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%env{LOCALAPPDATA}\Vendor\App\application.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="100KB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger%newline%message%newline" />
  </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

type =“ log4net.Util.PatternString”添加到文件元素,然后指定%env模式说明符,后跟大括号中的环境变量名称。

希望这对某人有帮助!