我正在使用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上进行部署。
答案 0 :(得分:1)
我是假的...我在这方面工作的时间太长了,然后终于问了一个StackOverflow问题,只是问了一个问题,我必须把我脑子里的东西弄得一团糟,这让我想到了笨蛋有权限。
我通过为我的服务部署的文件夹的IUSR,NETWORK SERVICE和IIS_IUSRS用户提供写入和修改权限来修复此问题。瞧它有效。
不确定所有这些用户是否需要权限,但至少有一个用户需要权限。
无论如何,问题解决了。
希望这可以帮助其他人,并且对SO社区提供支持,无论如何都非常棒。