2

我正在使用 nlog 编写日志文件以进行调试。当前日志文件位置设置为:

<target 
    name="file" 
    xsi:type="File" 
    fileName="${specialfolder:folder=LocalApplicationData}/x/y.log" 

但这会导致文件被写入c:\x\y.log,而不是%windir%\ServiceProfiles\NetworkService\AppData\Local\x\y.log像我所期望的那样在帐户下运行 asp.net/IIS NETWORK SERVICE

从 Web 应用程序检查值Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)会产生一个空/空字符串,这至少可以解释为什么我的日志最终会出现在根目录中。

所以真的有两个问题:

我们有在NETWORK SERVICE帐户下编写和运行的服务,可以正确解析此路径。asp.net/IIS 有什么特别之处,以至于这个特殊文件夹没有返回值?

考虑到我的 asp.net 进程在帐户下运行,哪里是一个安全且明智的写入日志的地方NETWORK SERVICE

4

1 回答 1

1

如果我的知识是正确的,那么问题是 IIS 没有为用户网络服务加载配置文件。

您可以在应用程序池的属性中调整此设置(

加载应用程序池身份的用户配置文件

如果将此参数设置为true,则调用Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)应返回正确的结果。

也可以看看:

如果它不起作用,我建议为服务帐户创建一个具有适当权限的文件夹以进行日志记录。

于 2011-09-01T06:55:59.003 回答