0

我正在使用 WCF Web 服务项目并使用 log4net,但除非我使用位于某个安全目录(如 C:\temp)中的外部 log4net 配置文件并创建日志,否则无法将其写入日志在某些安全目录中,例如 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>

我读过的帖子之一是这个... 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 上进行部署。

4

1 回答 1

1

我是个傻瓜……我在这方面工作了太久,最后问了一个 StackOverflow 问题,仅仅通过问这个问题,我一定是在脑子里敲了一些东西,这让我想只是获得权限。

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

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

总之,问题解决了。

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

于 2012-06-09T01:20:21.347 回答