我正在使用log4net,我将日志文件保存在AppData文件中以获取win XP / Vista等。
这是我的app.config文件到目前为止,我已经指定了名称softphone.log。 Hoewver,我不知道如何指定文件的完整路径,因为每个用户将根据其用户名使用不同的路径。
<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文件执行此操作?
非常感谢任何建议,
答案 0 :(得分:18)
我不相信你可以做你想做的事情,有一种方法可以自定义解析app.config文件的区域,这样你就可以添加自己的令牌,你可以用正确的值替换它,但我不知道看看它在log4net部分内是如何工作的。
但是,在配置中为log4net设置的所有内容也可以在代码中设置。我认为你最好的选择是在应用程序启动之后在代码中设置appender的属性。
<file value="${APPDATA}\log-file.txt" />
会做你想做的事。我自己没有测试过,所以我也会留下第一个答案 - 但我很想知道你是否有运气。
答案 1 :(得分:0)
用户%appdata%。 所以你的代码看起来像-
<file value="%appdata%/softphone.log"/>