我已经看到至少有两种方法可以在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"));
}
这样做的最佳做法是什么?
答案 0 :(得分:43)
启动时,请致电:
XmlConfigurator.Configure();
在您的Web.config中,在appSettings中指定log4net.Config:
<add key="log4net.Config" value="Log.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
针对每个环境区分应用程序和日志记录配置。在应用程序设置中维护对日志记录配置的引用。
\设置\的appSettings \ debug.config :
<appSettings>
<add key="log4net.Config" value="config\log4net\debug.config" />
...
</appSettings>
\设置\的appSettings \ staging.config :
<appSettings>
<add key="log4net.Config" value="config\log4net\staging.config" />
...
</appSettings>
\设置\的appSettings \将release.config :
<appSettings>
<add key="log4net.Config" value="config\log4net\release.config" />
...
</appSettings>
更改环境很简单,只需在Web.config中更新appSettings文件即可。
<appSettings file="config\appSettings\staging.config">
...
</appSettings>
答案 1 :(得分:4)
我对“魔术”配置方法不满意,因为我想在带有环境变量的路径中指定我的配置(%PUBLIC%\ MyApp \ MySettings.config)。
所以相反,我在app.config中有这个:
<add key="MyLog4NetConfigFile" value="%PUBLIC%\MyApp\MySettings.config"/>
并执行此操作以设置我的log4net配置:
var configFile = ConfigurationManager.AppSettings.Get("MyLog4NetConfigFile");
if( !string.IsNullOrEmpty(configFile))
{
configFile = Environment.ExpandEnvironmentVariables(configFile);
XmlConfigurator.Configure(new FileInfo(configFile));
}