我们创建了一个C#MVC应用程序。我们已经成功托管了这个网站,我们能够正确运行。问题是当我们使用log4net创建日志文件到我们的errorLogs文件夹中时,该文件夹存在于" .. inetpub / mysite / errorLogs"。但它不允许在那里写文件。
此外,我尝试过简单的文件写入:
System.IO.File.AppendAllText(sFilePath, "test content.");
at path" .. inetpub / mysite / App_Data / errorLogs"。
但没有任何事情发生。在查看权限时,我们拥有App_Data文件夹的所有权限,但它会抛出错误:
' /'中的服务器错误应用
访问路径' ... \ inetpub \ mysite \ App_Data \ Logs \ 20151026'是 拒绝。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.UnauthorizedAccessException:访问 路径' ... \ inetpub \ mysite \ App_Data \ Logs \ 20151026'被拒绝。
ASP.NET无权访问所请求的资源。考虑 授予对ASP.NET请求的资源访问权限 身份。 ASP.NET具有基本进程标识(通常是 IIS 5上的{MACHINE} \ ASPNET或IIS 6和IIS 7上的网络服务,以及 IIS 7.5上配置的应用程序池标识,如果使用的话 该申请不是冒充。如果申请是 冒充通过,身份将是 匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的用户 请求用户。
要授予对文件的ASP.NET访问权限,请右键单击“文件”中的文件 资源管理器,选择"属性"并选择“安全”选项卡。点击"添加" 添加适当的用户或组。突出显示ASP.NET帐户, 并选中所需访问的框。
还有其他方法可以为我的网站编写日志记录吗?
答案 0 :(得分:0)
尝试将IIS_IUSRS添加到包含日志的权限文件夹中。
答案 1 :(得分:0)
在我的情况下,我希望在应用程序池上设置的用户是拥有用File.AppendAllText()编写的文件的用户。
但是,如果已设置,则使用Connect As的用户。
在我的情况下,主网站是作为特定用户连接的,同一个用户在应用程序池上,但我有一个虚拟应用程序使用相同的应用程序池,但是作为Pass Through Authentication连接。因此,虚拟应用程序编写的任何文件的所有者都是名为IUSR的本地用户。