Chcę dodać rejestrowanie do aplikacji, nad którą aktualnie pracuję. Wcześniej dodawałem rejestrowanie, to nie jest problem.
Ale z perspektywy projektowania w języku obiektowym, jakie są najlepsze praktyki dotyczące rejestrowania zgodne z OOP i wzorcami?
Uwaga: obecnie robię to w C #, więc przykłady w C # są oczywiście mile widziane. Chciałbym również zobaczyć przykłady w Javie i Ruby.
Edycja: Używam log4net. Po prostu nie wiem, jak najlepiej to podłączyć.
źródło
Ponieważ robisz to w C #, polecam przyjrzeć się NLog i ElMAH. Można je BARDZO łatwo zainstalować za pomocą NUGET. Umieściłem kilka linków do tych poniżej, abyś mógł uzyskać więcej informacji.
źródło
Osobiście wybieram środowisko rejestrowania do wyboru (w moim przypadku Entlib, ponieważ pracuję z .NET) i piszę aspekt AOP do rejestrowania.
Następnie możesz przypisać dowolne metody / właściwości / klasy / przestrzenie nazw i dodać do nich rejestrowanie bez zaśmiecania źródła.
źródło
System, nad którym obecnie pracuję, wykorzystuje architekturę i komunikację sterowaną zdarzeniami, dzięki czemu większość działań w naszym systemie jest wynikiem polecenia i powoduje zdarzenia (jako wysyłane klasy DTO, a nie standardowe zdarzenie delegowane). Dołączamy procedury obsługi zdarzeń, których jedynym celem jest obsługa rejestrowania. Ten projekt pomaga nam się nie powtarzać, a także nie musi modyfikować istniejącego kodu, aby dodać / zmienić funkcjonalność.
Oto przykład jednej z takich klas rejestrowania, która obsługuje wszystkie zdarzenia, które mają być rejestrowane z wąskiej sekcji naszej aplikacji (dotyczące jednego konkretnego źródła treści, z którego importujemy).
Nie muszę koniecznie mówić, że jest to najlepsza praktyka, ponieważ wydaje mi się, że zmieniam zdanie na temat tego, co i jak często rejestrować - i za każdym razem, gdy muszę używać dziennika do diagnozowania problemu, nieuchronnie znajduję sposoby na ulepszenie informacje, które rejestruję.
Powiem jednak, że najważniejsze jest zapisywanie istotnych informacji (zwłaszcza w Ctrl-F / znajdź wyszukiwalny sposób).
Drugą najważniejszą częścią jest usunięcie kodu logowania z głównej logiki - może to uczynić metodę brzydką, długą i skomplikowaną bardzo szybko.
źródło
Jak powiedzieli inni, użyj
log4j
lublog4net
innego dobrze zbudowanego środowiska rejestrowania.Naprawdę nie lubię rejestrowania kodu, który przeszkadza logice biznesowej. Dlatego używam
Log4PostSharp
. Oznacza to, że mogę używać programowania zorientowanego na aspekty do opisywania metod takich jak to:Lub każda metoda w takim zestawie:
źródło
Nie jestem pewien, czy robi to jakikolwiek framework, ale z punktu widzenia projektowania, modelowałbym informacje, które należy zalogować głównie w trzech kategoriach:
W przypadku pierwszych dwóch kategorii moja idealna struktura rejestrowania powinna obsługiwać je jako proces po kompilacji i przejrzysta dla programistów. Byłoby miło dodać deklaratywne dodawanie rejestrowania do zestawów, podobnie jak poniżej:
W przypadku trzeciej kategorii programiści mogą po prostu utworzyć jedną lub więcej dedykowanych metod „rejestrowania” i wykorzystać śledzenie dla pierwszej kategorii. Metody rejestrowania nie służą niczym innym, jak tylko udostępnieniu punktu pośredniego, do którego można zastosować reguły śledzenia.
źródło