web-dev-qa-db-ja.com

ASP.NETにlog4Net外部構成ファイルを含めるためのベストプラクティス

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

それを行うためのベストプラクティスは何ですか?

25
Martin Buberl

起動時に、次を呼び出します:

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>
45
Anton

環境変数(%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));
}
4
pduncan