我在哪里可以将我的log4net日志文件写入ClickOnce?

时间:2009-04-15 20:31:12

标签: .net logging permissions clickonce log4net

当我在本地运行我的应用程序时,它会将我的log4net日志写入我已配置的位置(即<file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />)而没有任何问题。但是,当我通过ClickOnce部署我的应用程序时,日志文件没有被写入。

我知道ClickOnce应用程序在他们可以写入的位置方面受到限制,但我认为LOCALAPPDATA(例如,C:\ Users \ me \ AppData \ Local)是公平游戏。

有什么想法吗?

2 个答案:

答案 0 :(得分:15)

使用ClickOnce,文件夹规则与常规Windows应用程序略有不同。部署ClickOnce内容文件的数据文件夹位于c:\ Users \ me \ Local Settings \ Apps \ 2.0 \ Data中。在该文件夹下面是几个子文件夹级别,具有相当神秘的标识符。

因此,使用ApplicationDeployment类可以最好地检索给定ClickOnce应用程序的实际数据文件夹。您还应该检查IsNetworkDeployed属性以查看您是否在部署模式下运行:

if (ApplicationDeployment.IsNetworkDeployed)
{
    var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory;
    ...
}

由于DataDirectory由ClickOnce决定,因此您无法将该路径硬编码到log4net配置中。我的建议是在应用程序启动时修改programmaticaly文件路径。

foreach(var appender in LogManager.GetRepository().GetAppenders())
{
    var fileAppender = appender as FileAppender;
    if (fileAppender != null)
    {
        fileAppender.File = 
            fileAppender.File.Replace("${LOCALAPPDATA}", dataDirectory);
        fileAppender.ActivateOptions();
    }
}

答案 1 :(得分:3)