2009-08-03 12 views
9

Zawijam wzorce & Praktyka blokowania aplikacji rejestrujących bibliotekę korporacyjną dla aplikacji napisanej w .NET.Rejestrator Singleton, rejestrator statyczny, rejestrator fabryczny ... jak się zalogować?

Chcę być w stanie podklasy rejestratora (tj. Aby zapewnić rejestrowanie specyficzne dla domeny).

Jaki jest najlepszy sposób na zrobienie tego?

Na przykład mam statyczną klasę Logger, ale to nie pozwala mi na specjalizację w logowaniu do domeny.

Na przykład

Log(MyDomainObj obj, string msg)

Odpowiedz

12

Wyjazd NLog. Używają tego rodzaju wzoru:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

Następnie można specjalizować wyjście oparte na klasie, która myDomainLogger należy.

Więcej szczegółów:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

Następnie w swoim wyjściu można mieć to wyjście „MyDomain.SomeFunc” jako część „to jest test” wiadomość.

5

Również do kasy log4net. Nigdy nie stwierdziłem, że rejestracja EL jest tak elastyczna jak log4net. Wybrałem log4net, ponieważ byłem już zaznajomiony z używaniem log4j.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

Robi to w ten sposób, mogę dostać logi tak:

2009-07-15 09: 48: 51.674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - Przykładowy komunikat wyjściowy:

4

Można nawet zrobić coś lepszego. Napisz klasę opakowującą, która otacza Nlog lub log4net lub cokolwiek innego. Następnie możesz użyć tej klasy wrappera (może użyć do niej interfejsu, jeśli naprawdę chcesz rozdzielić rzeczy) w swoim kodzie. W ten sposób, jeśli zdecydujesz się zmienić klasę rejestratora, musisz zmienić tylko jedną klasę, a nie edytować wszystkie swoje zajęcia.

+2

Z punktu widzenia projektowania jest to droga. – Mantzas

+0

Dostępne są już opakowania typu Common.Logging. – Onur

Powiązane problemy