2009-03-15 15 views
6

ero curioso come la seguente riga lavora per la configurazione log4net in un assieme:configurazione log4net con [assembly:]

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

Sto indovinando questo viene chiamato qualche tempo prima il runtime invoca "main()", ma quando succede questo, e quali sono le implicazioni? Ci sono altri framework/librerie che usano questo attributo assembly per caricare un contesto iniziale come questo? Ci sono vantaggi/svantaggi nel fare qualcosa del genere, al contrario di chiamare un metodo "Configura" in main()?

risposta

7

I vantaggi di ciò sono che il codice viene inizializzato prima del codice principale e prima dell'inizializzazione statica.

Ciò significa che è possibile, ad esempio, utilizzare la registrazione log4net all'interno di un costruttore statico. Senza un modo per inizializzare log4net, nel costruttore statico non si sa mai con certezza che il codice sia stato inizializzato correttamente.

Questa area non sembra essere molto ben documentata (o facile da trovare comunque) ma presumo che l'inizializzazione dei metodi chiamati venga eseguita in fase di caricamento dell'Assieme.

+1

Questa funzione è documentata nella sezione log4net Manual, http://logging.apache.org/log4net/release/manual/configuration.html, "Attributi di configurazione". – Designpattern

0

"Suppongo che questo venga chiamato prima che il runtime invochi" main() "ma quando si verifica ciò e quali sono le implicazioni?"


Secondo log4net documentation:

Uso attributi può essere un metodo più chiaro per definire dove configurazione dell'applicazione verrà caricato. Tuttavia vale la pena notando che gli attributi sono puramente passivi. Sono solo informazioni . Pertanto se si utilizzano gli attributi di configurazione è necessario richiamare log4net per consentirgli di leggere gli attributi.

Quindi credo che sia ancora necessario chiamare il metodo XmlConfigurator.Configure() o .

Problemi correlati