Подтвердить что ты не робот

Лучшая практика включения внешнего файла конфигурации log4Net в ASP.NET

Я видел как минимум два способа включить внешний файл конфигурации log4net в веб-приложение ASP.NET:

Имея следующий атрибут в файле AssemblyInfo.cs:

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

Вызов XmlConfigurator в файле Global.asax.cs:

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

Какая была бы лучшая практика?

4b9b3361

Ответ 1

При запуске вызовите:

XmlConfigurator.Configure();

В вашем Web.config укажите log4net.Config в appSettings:

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

Изменение среды - это простой вопрос об обновлении файла appSettings в Web.config.

<appSettings file="config\appSettings\staging.config">
    ...
</appSettings>

Ответ 2

Я был недоволен "магическим" вариантом конфигурации, потому что я хотел указать свою конфигурацию в пути с переменной окружения (% 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));
}