2009-03-15 20 views
6

byłem ciekaw jak następujący wiersz działa dla konfigurowania log4net w zespole:konfiguracja log4net z [montażu:]

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

Zgaduję ten pobiera nazywane kiedyś przed runtime wywołuje „main()”, ale kiedy to się dzieje i jakie są tego konsekwencje? Czy istnieją inne frameworki/biblioteki, które używają tego atrybutu assembly do ładowania początkowego kontekstu takiego jak ten? Czy są jakieś zalety/wady takiego działania, w przeciwieństwie do wywoływania metody "Configure" w main()?

Odpowiedz

7

Zaletą tego jest to, że kod jest inicjowany przed kodem głównym i przed statyczną inicjalizacją.

Oznacza to, że można na przykład użyć rejestrowania log4net w statycznym-konstruktorze. Bez możliwości wstępnego zainicjalizowania log4net, w konstruktorze statycznym, nigdy nie wiadomo na pewno, że kod został poprawnie zainicjowany.

Ten obszar nie wydaje się być bardzo dobrze udokumentowany (lub łatwy do znalezienia), ale zakładam, że inicjalizacja wywoływanych metod jest wykonywana w czasie ładowania zespołu.

+1

Ta funkcja jest udokumentowana w podręczniku log4net, http://logging.apache.org/log4net/release/manual/configuration.html, "Atrybuty konfiguracji". – Designpattern

0

„Zgaduję to pobiera nazywane kiedyś przed runtime wywołuje«main()», ale kiedy to się dzieje i jakie są konsekwencje?”


Zgodnie log4net documentation:

pomocą atrybutów może być wyraźniejszy sposób określający miejsce konfiguracyjny aplikacji będą załadowane. Warto jednak zauważyć, że atrybuty są wyłącznie bierne. Są to tylko informacje . Dlatego jeśli używasz atrybutów konfiguracji, musisz wywołać log4net, aby umożliwić jej odczytanie atrybutów.

Zgaduję więc, że nadal musisz zadzwonić do metody XmlConfigurator.Configure() lub .