在ASP.NET中包含log4Net外部配置文件的最佳实践

我已经看到至少两种方法在ASP.NET Web应用程序中包含外部log4net配置文件:

在AssemblyInfo.cs文件中具有以下属性:

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

在Global.asax.cs中调用XmlConfigurator:

 protected void Application_Start() { XmlConfigurator.Configure(new FileInfo("Log.config")); } 

这样做的最佳做法是什么?

在启动时,请致电:

 XmlConfigurator.Configure(); 

在Web.config中,在appSettings中指定log4net.Config:

  

此特殊设置允许您更改日志配置,而无需重新编译。 特别适合在多个环境之间移动。

考虑以下项目文件结构:

 \config\log4net\debug.config \config\log4net\staging.config \config\log4net\release.config \config\appSettings\debug.config \config\appSettings\staging.config \config\appSettings\release.config 

针对每个环境区分应用程序和日志记录配置。 在应用程序设置中维护对日志记录配置的引用。

\ config \ appSettings \ debug.config

   ...  

\ config \ appSettings \ staging.config

   ...  

\ config \ appSettings \ release.config

   ...  

更改环境是在Web.config中更新appSettings文件的简单问题。

  ...  

我对“魔术”配置方法不满意,因为我想在具有环境变量的路径中指定我的配置(%PUBLIC%\ MyApp \ MySettings.config)。

所以相反,我在app.config中有这个:

  

并执行此操作以设置我的log4net配置:

 var configFile = ConfigurationManager.AppSettings.Get("MyLog4NetConfigFile"); if( !string.IsNullOrEmpty(configFile)) { configFile = Environment.ExpandEnvironmentVariables(configFile); XmlConfigurator.Configure(new FileInfo(configFile)); }