有没有办法将%APPDATA%添加到AssemblyInfo.cs中的Log4Net配置路径?

时间:2012-08-28 09:27:13

标签: c# .net logging log4net relative-path

我正在配置log4net以使用单独的配置文件。这可以通过在AssemblyInfo.cs文件中添加以下行来完成。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]

这个位置是相对于程序目录的,但我希望它在用户的APPDATA文件夹中。类似的东西:

ConfigFile = @"C:\Users\UserName\AppData\Roaming\MyApplication\Logging\Log4Net.config"

问题是这不是相对路径,即不支持不同的用户名等。我真正想要的是以下内容:

ConfigFile = @"%APPDATA%\MyApplication\Logging\Log4Net.config"

这当然不起作用。我希望这可能会解决它:

ConfigFile = @"${APPDATA}\MyApplication\Logging\Log4Net.config"

或者这个:

ConfigFile = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    @"MyApplication\Logging\Log4Net.config")

没有运气。这两个人首先认为它是相对路径的一部分,后者因为它在AssemblyInfo中而被拒绝:

  

错误1属性参数必须是常量表达式typeof   表达式或数组创建表达式的属性参数   类型C:\ Source \ ... \ Tools \ Logging \ Logging \ Properties \ AssemblyInfo.cs 39 56记录

我是否必须将应用程序配置为在启动时使用自定义路径?我真的不想,因为我希望代码尽可能不可知。

1 个答案:

答案 0 :(得分:0)

我最终在启动时执行了配置。在我的日志门面的实现中我刚才说:

class Log4NetLogger : ILogger
{
    public Log4NetLogger(...)
    {
        if (!m_Configured){
            string configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Logging\Log4Net.config");
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFile));
            m_Configured = true;
        }
        ...
    }
    ...
}