2009-11-13 104 views
24

我已經看到至少有兩種方法,包括在ASP.NET Web應用程序的外部log4net的配置文件:最佳實踐,包括log4net的外部配置文件在ASP.NET

在你的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")); 
} 

什麼是做到這一點的最佳做法?

回答

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> 
+0

這是一個好點,但我真的不喜歡這個「魔術」配置的東西。 我現在所做的是在Web的appSettings中聲明三個帶有文件名的密鑰。配置Debug,Stage,Release並使用ApplicationStart中的預處理器指令自動選擇正確的一個,具體取決於組件的部署配置。 您的意見是?該解決方案有什麼問題嗎? – 2009-11-13 21:53:59

+0

@Martin:我添加了一個例子來說明。解決方案唯一的缺點是構建版本比web.config更改的靈活性。 – Anton 2009-11-13 22:35:55

+0

thx,爲您的建議! – 2009-11-13 22:39:07

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)); 
}