2009-03-15 2 views
6

мне было интересно, как работает следующая строка для настройки log4net в сборке:конфигурации log4net с [сборки:]

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

Я предполагаю, что это вызывается иногда до выполнения вызывает «основной()», но когда это происходит, и каковы последствия? Существуют ли другие структуры/библиотеки, которые используют этот атрибут сборки для загрузки начального контекста, подобного этому? Существуют ли какие-либо преимущества/недостатки для выполнения подобных действий, а не для вызова метода «Настроить» в main()?

ответ

7

Преимущества этого в том, что код инициализируется перед вашим основным кодом и предшествует статической инициализации.

Это означает, что вы можете, например, использовать log4net для ведения журнала в статическом-конструкторе. Без способа предварительной инициализации log4net в статическом конструкторе вы никогда не узнаете наверняка, что код был инициализирован правильно.

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

+1

Эта функция документирована в руководстве по log4net, http://logging.apache.org/log4net/release/manual/configuration.html, разделе «Атрибуты конфигурации». – Designpattern

0

«Я предполагаю, что это называется когда-то до того, как runtime вызывает« main() », но когда это происходит и каковы последствия?»


В соответствии с log4net documentation:

Использование атрибутов может быть яснее метод определения, где конфигурация приложения будут загружены с. Однако стоит , отметив, что атрибуты являются чисто пассивными. Это только информация . Поэтому, если вы используете атрибуты конфигурации, вы должны вызвать log4net , чтобы он мог читать атрибуты.

Поэтому, я думаю, вам по-прежнему нужно позвонить либо XmlConfigurator.Configure(), либо LogManager.getLogger().

Смежные вопросы