我正在使用 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 上进行部署。