C#如何在app.config文件中指定appData文件路径

20

我正在使用log4net,并希望将日志文件保存在Win XP / Vista等操作系统的AppData文件中。

这是我的app.config文件,我已经指定了名称为softphone.log。但是,我不知道如何指定完整路径到该文件,因为每个用户的路径都不同,取决于他们的用户名。

<log4net>
    <logger name="default">
      <level value="DEBUG"/>
    </logger>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="softphone.log"/>
      <appendToFile value="true"/>
      <rollingStyle value="Size"/>
      <maxSizeRollBackup value="10"/>
      <maximumFileSize value="1MB"/>
      <staticLogFileName value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>
    </appender>
  </log4net>

在我的源代码中,我可以通过以下方式获取路径:

System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

然而,我不能在我的app.config中使用上述内容,如果我在我的系统上硬编码路径,则路径将是:

C:\Documents and Settings\John\Application Data

然而,每个客户端的情况都是不同的。那么有没有一种方法可以针对app.config文件做到这一点呢?

非常感谢任何建议,


可能是重复的问题:如何为log4net指定常见应用程序数据文件夹? - Anthony Mastrean
2个回答

20

我不相信你能做到你想要的,虽然有一种方法可以自定义解析app.config文件中的区域,以便您可以添加自己的令牌,并将其替换为正确的值,但我不知道如何在log4net部分中使用它。

然而,在配置文件中设置的log4net的所有内容也可以在代码中设置。我认为你最好的选择是在应用程序启动后立即在代码中设置附加程序的属性。


啊,不要紧,快速搜索揭示了我的无知。从这里这里可以看出,类似于以下内容:

<file value="${APPDATA}\log-file.txt" />

会实现你想要的功能。我自己没有测试过这个代码,所以我会保留我的第一个答案 - 但我很想知道你是否能用它成功。


1
很高兴你编辑了 ;) 总有办法以某种方式获取环境变量。 - OJ.
我会尝试并反馈我的结果。谢谢。 - ant2009
只是想说,这个对我来说可以正常运行。目前我只在XP下测试过它,但我认为它也适用于Vista。 - Matt Warren
两个链接都失效了 :( 我尝试找到新的链接,但没有成功。 - Timo

0

用户 %appdata%。 所以你的代码会像这样 -

<file value="%appdata%/softphone.log"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接