如何读取log4net配置文件并登录inetpub / wwwroot文件夹中的日志文件?

时间:2012-06-09 01:03:45

标签: c# wcf web-services iis log4net

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

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

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

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

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

我读过的其中一个帖子就是这个...... log4net in WCF hosted by IIS 7.5 no write log file

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

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

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

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

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上进行部署。

1 个答案:

答案 0 :(得分:1)

我是假的...我在这方面工作的时间太长了,然后终于问了一个StackOverflow问题,只是问了一个问题,我必须把我脑子里的东西弄得一团糟,这让我想到了笨蛋有权限。

我通过为我的服务部署的文件夹的IUSR,NETWORK SERVICE和IIS_IUSRS用户提供写入和修改权限来修复此问题。瞧它有效。

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

无论如何,问题解决了。

希望这可以帮助其他人,并且对SO社区提供支持,无论如何都非常棒。