【问题标题】:C# how to specify the appData file path in the app.config fileC#如何在app.config文件中指定appData文件路径
【发布时间】:2010-11-01 03:18:01
【问题描述】:

我正在使用 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 文件执行此操作?

非常感谢您的任何建议,

【问题讨论】:

标签: c# app-config


【解决方案1】:

用户 %appdata%。 所以你的代码看起来像 -

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

【讨论】:

    【解决方案2】:

    我不相信你可以做你想做的事,有一种方法可以自定义解析 app.config 文件的区域,这样你就可以添加你自己的令牌,你可以用正确的值替换它,但我不知道'看不出这在 log4net 部分是如何工作的。

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


    啊,没关系,快速搜索发现我的无知。从herehere 看来,类似这样的东西:

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

    会做你想做的事。我自己没有对此进行测试,所以我也会留下我的第一个答案 - 但我很想知道你是否有任何运气。

    【讨论】:

    • 很高兴你编辑了 ;) 总有办法以某种方式获取环境变量。
    • 我会试一试并报告我的结果。谢谢。
    • 只是说这对我来说没问题,我目前只在 XP 下测试过,但我认为它也适用于 Vista。
    猜你喜欢
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多