如何读取 log4net 配置文件和日志到日志文件位于 inetpub/wwwroot 文件夹中



我正在使用WCF Web服务项目并使用log4net,但无法让它写入日志,除非我使用某个安全目录中的外部log4net配置文件,如C:\temp,并在某个安全目录中创建日志,如C:\temp。

我所说的"安全"目录实际上是任何不在 C:\users 或 C:\inetpub\wwwroot 下的目录。 如果我尝试将 log4net 配置文件或日志本身放在部署我的服务的C:inetpubwwwroot<projectName>文件夹中,它什么也不做(没有错误,只是没有创建日志,什么也没发生)。 但是,如果我从 C:\temp 下的 log4net 配置文件加载配置,并将我的日志写入 C:\temp,它工作正常。

我不想使用 C:\temp,我希望日志位于部署服务的 inetpub 中,就在 web.config 中。 我知道这显然是用户权限问题,但是可以做些什么呢?

另外,我无法让它从web.config文件中读取任何log4net配置;这就是为什么我首先尝试使用外部log4j配置文件。

我在这里阅读了很多帖子,并按照他们的说明设置了所有内容。 我只需要朝着正确的方向推动为 IIS 托管的 WCF Web 服务存储 log4net 配置的最佳实践,以及我可以做些什么来存储我的登录wwwroot/<myprojectfolder>

我读过的一篇文章是这个... 由 IIS 7.5 承载的 WCF 中的 log4net 无写入日志文件

这是我到目前为止得到的...

在AssemblyInfo.cs文件中,我有以下内容。 我已经尝试了两种指定配置文件的方法,以及通过不指定配置文件让它尝试使用 web.config 的方法。

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

在我必须手动添加的 Global.asax 中,我有以下内容。 如果我在调用 Configure() 时在 C:\temp 等安全目录中指定一个文件,它可以工作......

XmlConfigurator.Configure(); 
var logger = LogManager.GetLogger(typeof(Global)); 
logger.Info("Starting up services"); 

在我的服务实现文件中,我有这个...

private static readonly log4net.ILog logger = log4net.LogManager.GetLogger
                (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

有什么想法吗?

编辑

我正在使用带有VS2008的Windows 7 Pro x86作为我的开发盒,并在本地IIS上部署。

我是个假人...我为此工作了太久,然后终于问了一个 StackOverflow 问题,仅仅通过问这个问题,我一定在我的大脑中敲动了一些东西,让我想去找权限。

我通过向我的 IUSR、网络服务和IIS_IUSRS用户授予部署我的服务的文件夹的写入和修改权限来解决此问题。 瞧,它有效。

不确定所有这些用户是否需要权限,但至少其中一个用户需要权限。

无论如何,问题解决了。

希望这对其他人有所帮助,无论如何都支持SO社区如此出色。

最新更新