2011-06-07 3 views
1

Я только начинаю с log4net. Для чтения файла конфигурации XML, это мое понимание того, что вы должны поместить следующую информацию в файле AssemblyInfo вашего проекта:В log4net, как я могу вызвать Config.XmlConfigurator только один раз для решения?

<Assembly: log4net.Config.XmlConfigurator(ConfigFile:="Log4net.Config", Watch:=True)> 

У меня есть решение с несколькими проектами, и кажется, что я должен поставить этот в каждом файле AssemblyInfo в решении (по одному для каждого проекта). Я попытался просто поместить заявление в AssemblyInfo проекта Startup, но протоколирование вызовов в других проектах не будет работать. Я должен включать инструкцию в каждый проект, который выполняет вызовы протоколирования.

1) Есть ли способ сделать вызов Config.XmlConfigurator в одном месте, один раз для всего решения?

2) Что вызывает поведение, которое я вижу?

ответ

1

Почему бы не использовать статический конструктор в классе, на который будут ссылаться все сборки? Если они находятся в одном домене приложения, то он будет вызываться ровно один раз.

+0

Это может быть маршрут, который я принимаю. Я подумал о том, что будет класс bootstrapper, который будет делать такие вещи при запуске, но сейчас единственное, что было бы в нем, - это этот вызов, поэтому я решил сначала попробовать подход AssemblyInfo. –

+0

Закончился этот маршрут и создал статический класс начальной загрузки, который вызывается при запуске для инициализации log4net (и что-то еще, что нужно для приложения). –

3

Вы должны поместить это в сборку, которая «проведет» ваше решение. В приложении console/winform/wpf в сборке, которые компилируются в «.exe», в веб-приложении я обычно вызываю XmlConfigurator.Configure(); в событии Application-Start.

+0

Я думал, что это тоже сработает, но это не так, что заставило меня задать вопрос. Я использую Winforms. Если я только поместил вызов XmlConfigurator в AssemblyInfo проекта Winforms, то ни один из других проектов (библиотеки классов) не сможет зарегистрировать. –

+0

Попробуйте явно вызвать XmlConfigurator.Configure() даже в приложении winform. Я не очень хорошо помню, но я думаю, что есть проблема с атрибутом. –