ASP.NETWebアプリケーションに外部log4net構成ファイルを含める方法を少なくとも2つ見てきました。
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を指定します。
<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
アプリケーションとロギングの構成は、環境ごとに区別されます。ロギング構成への参照は、アプリケーション設定で維持されます。
\ config\appSettings\debug.config:
<appSettings>
<add key="log4net.Config" value="config\log4net\debug.config" />
...
</appSettings>
\ config\appSettings\staging.config:
<appSettings>
<add key="log4net.Config" value="config\log4net\staging.config" />
...
</appSettings>
\ config\appSettings\release.config:
<appSettings>
<add key="log4net.Config" value="config\log4net\release.config" />
...
</appSettings>
環境の変更は、Web.configのappSettingsファイルを更新するだけの簡単なことです。
<appSettings file="config\appSettings\staging.config">
...
</appSettings>
環境変数(%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));
}