XmlConfigurator.Configure(新的FileInfo(" somepath"))没有配置配置文件

时间:2014-05-07 02:47:39

标签: c# logging web-config log4net

我想这个问题已经在互联网上被问了几百万次,但遗憾的是没有一个解决方案适合我。

我正在编写一个web api服务,我的.net项目中的体系结构使我有不同的层,如数据访问,服务层,javascript web客户端(显然设置为启动项目)等。

我正在使用一个名为MyConfigFile.config的外部xml配置文件(用于记录),我已将此配置文件包含在javascript Web客户端项目的根目录中,我还在appsetting中添加了配置文件root web.confilg文件,如下所述。

<appSettings>
      <add key="NSLog" value="~\MyConfigFile.config"/>
</appSettings> 

我也添加了这一行

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

AssemblyInfo.csMyConfigFile.config文件的构建操作是内容,复制到输出目录总是复制

我想记录服务层中存在的控制器类中的错误和信息,我还在app.config文件中添加了整个xml配置文件的内容(这是服务层项目中的一个文件)。但是我没有在服务层AssemblyInfo.cs中添加任何内容(我为AssemlyInfo.cs对上面提到的Web客户端项目的方式)。 然后我使用以下方法在每个控制器类中配置外部配置文件

ICollection ic = XmlConfigurator.Configure(new FileIinfo("path to external config file"));

为了给FileInfo构造函数提供路径,我使用了百万种方式,比如

ConfigurationManager.AppSettings["MyConfigFile"].ToString() 

因为我在我的web.config文件

的appsetting中提到了这个文件

然后我用

 string path = Server.MapPath("~/MyConfilg.config");

然后我用

string path = HostingEnvironment.ApplicationPhysicalPath + "MyConfigFile";

这些都不会抛出null,但ICollection接口的“ic”对象始终返回count zero。当我在控制台应用程序中执行相同操作时,将配置文件包含在控制台应用程序中,然后将Configure()方法与外部配置文件的完整物理路径一起用于FileInfo构造函数参数对象“ic”给了我4分。

为什么“ic”在控制台应用程序中给我一些计数,为什么不在Web服务的控制器类中。我应该如何为FileInfo的构造函数参数提供路径值,以便“ic”对象应该开始给我一些计数值。

0 个答案:

没有答案