Dlaczego większość przykładów log4net pobiera rejestrator dla klasy, wykonując następujące czynności:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Zamiast tylko przekazywać typeof (MyClass):
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Czy jest jakiś inny powód, aby to zrobić, poza tym, że pierwsza opcja nie wymaga podania określonej nazwy klasy?
Jestem użytkownikiem NLog i zwykle sprowadza się to do:
Wydawało się trochę dziwne, że musisz przejść przez refleksję w Log4Net, więc zajrzałem do kodu źródłowego NLog i oto, co robią dla ciebie:
Chyba napisałbym coś podobnego dla Log4Net jako rozszerzenie lub metoda statyczna zamiast wklejać odbicie jako część kodu mojego kotła :)
źródło
Jak mówisz - jest to wygodne, ponieważ możesz stworzyć logger w metodzie bez znajomości nazwy klasy (wiem, trywialne), ale pozwala na wycinanie i wklejanie metod między klasami bez konieczności zmiany nazwy wywołania.
źródło
Myślę, że powodem jest to, że za pomocą
.DeclaringType()
metody otrzymujesz typ typu środowiska uruchomieniowego . Możesz użyć programu rejestrującego w klasie bazowej i nadal widzieć rzeczywisty typ obiektu w danych wyjściowych programu rejestrującego. To sprawia, że dochodzenia są znacznie wygodniejsze.źródło
Ułatwia również tworzenie szablonów Codesmith do celów generowania kodu.
źródło