конфигурация log4net с [сборка:] - PullRequest
7 голосов
/ 16 марта 2009

Мне было любопытно, как работает следующая строка для настройки log4net в сборке:

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

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

Ответы [ 2 ]

8 голосов
/ 20 марта 2009

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

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

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

0 голосов
/ 02 января 2013

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


Согласно документации log4net :

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

Так что, я думаю, вам все равно нужно вызвать либо метод XmlConfigurator.Configure(), либо LogManager.getLogger().

...