Kiedy powinienem używać Tracing vs Logger.NET, Enterprise Library, log4net lub Ukadc.Diagnostyka?

Jak wybrać standardowe śledzenie, Logger.NET, Enterprise Library, log4net lub Ukadc.Diagnostyka?

Czy jest sytuacja, w której jeden jest bardziej odpowiedni od drugiego? ... co to może być? (ASP.NET, console app, Azure Cloud, SOHO, Enterprise...)

Jakie są zalety lub wady?

Czy przegapiłem jakieś inne duże frameworki logowania?

Author: wageoghe, 2011-01-23

6 answers

Jest wiele podobnych pytań tutaj na SO:

Przegapiłeś kilka powszechnie używanych frameworków logowania. Oto lista powszechnie używanych frameworków, niektóre z który wymieniłeś:

Rejestrowanie abstrakcji:

System.Diagnostyka addons:

Inne

Kilka innych frameworków logowania z codeplex (które widziałem tutaj na SO):

Dlaczego można wybrać jeden nad drugim? To trudne. Wiele z nich to osobiste preferencje. Niektóre z nich są techniczne (lub funkcji) wyższość.

Jedną z oczywistych wad każdego frameworka logowania (szczególnie tych stron trzecich)jest jakość wsparcia. Co zrobić, jeśli masz problem z log4net, NLog, Common.Logowanie itp.? Czy uda ci się uzyskać poprawkę od twórców tych frameworków? Może to nie być niezwykle ważne, ponieważ kod źródłowy jest dostępny dla tych frameworków. Możesz jednak nie "dziedziczyć" drzewa źródłowego tylko po to, aby wprowadzić poprawkę lub dodać ulepszenie. Powiem, że frameworki są tak rozszerzalne, że wiele ulepszeń można dodać za pomocą zwykłych punktów rozszerzeń.

Jeśli czytasz linki, które zamieściłem powyżej, myślę, że można powiedzieć, opierając się wyłącznie na ilości korzystnych wzmianek, że log4net byłby wyraźnym "zwycięzcą". Będzie on wymieniany częściej jako ulubiony historyczny logging i to, co Wiele osób wybierze do użycia w przyszłości.

NLog ma swoich zwolenników, po prostu nie ma penetracji, czyli " top of umysł " świadomość, że log4net robi, mimo że są one bardzo podobne. Możliwości NLog są bardzo podobne do log4net i ma dodatkową zaletę, że przeszedł ostatnio znaczny cykl rozwoju.

Biblioteka korporacyjna jest często reklamowana jako dobry wybór, ale jest prawie tak samo często reklamowana jak okropny wybór. Może niektóre z jego negatywnej reputacji są może nie tak dobre wczesne wersje? Może teraz jest lepiej?

System.Diagnostyka jest często zalecana jako rozsądny wybór z co najmniej trzema silnymi korzyściami: brak zależności od stron trzecich, wiele komponentów Microsoft jest instrumentowanych z systemem.Diagnostyka, jest łatwo rozszerzalny (przypuszczalnie dodać niektóre możliwości, które są już obecne "za darmo" w frameworkach takich jak log4net i NLog?). Jeśli używasz systemu.Diagnostyka, myślę, że konsensus byłby (podobnie jak moje zalecenie), aby używać obiektów TraceSource zamiast Trace.WriteLine / Debug.WriteLine.

Zwróć również uwagę na ten System.Diagnostyka i WCF dobrze ze sobą współpracują. Ruch komunikacyjny WCF może być rejestrowany za pomocą systemu.Diagnostyka i WCF będą również propagować System.Informacja o aktywności diagnostycznej (System.Diagnostyka.CorrelationManager.ActivityId) przez połączenia graniczne usługi WCF.

Nie jestem pewien, czy log4net nadal powinien zachować swój najbardziej preferowany status. jak już wspomniano w innym miejscu Tutaj Na SO, log4net nie wydaje się być ostatnio dużo rozwijany (zauważ, że myślę, że "log4net jest martwy" jest NLog 2.0 jest obecnie w fazie beta, a ostateczne wydanie planowane jest na pierwszy kwartał 2011 roku (aktualizacja: NLog 2.0 została wydana 17 lipca 2011). Czy to czyni NLog oczywistym lepszym Wyborem niż log4net? Nie wiem, ale myślę, że, relatywnie rzecz biorąc, NLog powinien otrzymać co najmniej równą uwagę przy wyborze pomiędzy tymi dwoma i, prawdopodobnie, powinien być domniemanym faworytem dla nowego rozwoju, przynajmniej dopóki rozwój log4net nie pokaże więcej oznak życie.

Log4net i NLog oferują bardzo elastyczne opcje konfiguracji. Pozwalają one na bardzo drobną szczegółowość definicji instrukcji logowania(według "standardowego" wzorca definiowania rejestratora dla każdego typu). Pozwalają one również na łatwe rozszerzenie bibliotek, pozwalając na tworzenie własnych obiektów " logging destination "(appendery log4net i cele NLog) oraz obiektów" formatowania " (Konwertery wzorców log4net i NLog LayoutRenderers).

Poza logowaniem wybór frameworka, niektóre(wiele?) zaleca izolowanie kodu aplikacji od twardej zależności od konkretnego frameworka logowania za pomocą warstwy abstrakcji. Może to przybrać formę własnego interfejsu ILogger, który zaimplementujesz, być może na bazie istniejącego frameworka. W przyszłości możesz zmienić frameworki, wdrażając program ILogger w innym frameworku. Możesz też użyć DI/IoC, aby wstrzyknąć "ILogger"do kodu. Wiele frameworków DI / IoC zapewnia wbudowany ILogger abstrakcja, która może być skonfigurowana do korzystania z log4net, NLog lub biblioteki korporacyjnej lub możesz napisać własną implementację Iloggera i wstrzyknąć to). Kogo obchodzi, co to jest wdrożenie? Innym sposobem na odizolowanie kodu od twardej zależności od konkretnego frameworka logging jest użycie istniejącego frameworka logging abstraction, takiego jak Common.Logging lub SLF. Zaletą jest to, że ponownie Twoja aplikacja nie jest zależna od konkretnej struktury logowania. Jednak niektórzy by powiedzmy, że właśnie zamieniłeś jedną zależność (na Framework logging) na inną (Framework logging abstraction).

Jeszcze dwie uwagi o abstrakcji logowania:

  1. Dobra abstrakcja logowania powinna umożliwiać przechwytywanie danych wyjściowych z różnych ram logowania w tym samym pliku wyjściowym. Pospolite.Logowanie nazywa to "pomostowaniem". Powiedz, że napisałeś aplikację za pomocą Common.Logowanie, wspierane przez NLog. Teraz powiedz, że używasz trzeciej biblioteki klas, która jest napisana korzystanie bezpośrednio z log4net. Dzięki systemowi pomostowemu możesz przechwycić wyjście log4net (za pomocą niestandardowego aplikacji) i przekierować je przez Common.Rejestrowanie, aby dane wyjściowe dziennika biblioteki klas innych firm były wyświetlane w kontekście danych wyjściowych dziennika aplikacji.

  2. Korzystanie z abstrakcji logowania pozwala również na "jazdę testową" frameworków logowania podczas tworzenia. Możesz zacząć myśleć, że log4net jest w tym kierunku, ale chcesz zostawić siebie otwartym na wypróbowanie NLog. Korzystając z abstrakcji logowania, stosunkowo łatwo jest przełączać się między nimi. Ostatecznie, możesz dokonać wyboru, który framework logowania, ale w międzyczasie, udało Ci się napisać góry kodu, który nie jest w żaden sposób zależny od konkretnego frameworku logowania.

Innym powodem, dla którego możesz wybrać jeden framework nad innym, jest środowisko, w którym pracujesz. Jeśli korzystasz już z części biblioteki Enterprise, może to wystarczyć, aby popchnąć cię do korzystanie z logowania Biblioteki korporacyjnej.

Co jeśli rozwijasz się w Silverlight? Możesz użyć czegoś w rodzaju Clog-części wapnia . Możesz również użyć NLog 2.0, który jest kompatybilny z Silverlight i WP7.

System.Dodatki diagnostyczne (Ukadc.Diagnostyka, Niezbędna.Diagnostyka). Nie są to ramy do rejestrowania jako takie. Reprezentują one raczej zbiory użytecznych obiektów i punktów rozszerzeń, które mogą być używane z istniejącym systemem.Diagnostyka ramy. Jedną z najlepszych rzeczy, moim zdaniem, które każdy z tych dodatków dodaje, jest możliwość sformatowania wyjścia logowania, podobnie jak można go sformatować za pomocą log4net i NLog. Nie używałem niezbędnych.Diagnostyka, ale eksperymentowałem z Ukadc.Diagnostyka i myślę, że to naprawdę fajne. Łatwo jest nawet napisać własne "tokeny formatowania".

Nie wiem, czy to całkowicie odpowiedział na twoje pytanie( które i tak jest dość szerokie), ale myślę, że jest wiele można to przemyśleć.

 94
Author: wageoghe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-20 10:57:05

Właśnie zacząłem używać log4net w VS2010 i odkryłem, że ma zależność od systemu.Www... co sprawia, że jest niezgodny z celami frameworku". NET X. X Client Profile"... Biorąc pod uwagę to, co ktoś tutaj napisał o Windows Update, używając Profilu Klienta jako redystrybutywnego. NET z wyboru, oznacza to, że log4net nie może być już wybranym rejestratorem, jeśli chcesz, aby Twój kod działał na większości komputerów...

Dzięki za info o innych opcjach-będę sprawdzam je...

 5
Author: toadflakz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-02 17:30:05

Aby dodać kilka rzeczy, których nauczyliśmy się z konferencji Microsoft Build 2013:

  • Log4NET pod dużym obciążeniem ma zapis do pliku głównie dlatego, że proces ten jest synchroniczny. W pewnych warunkach możliwe jest uzyskanie sporności i terminów. Można to zweryfikować za pomocą AppDynamics lub innego podobnego narzędzia.

  • NLog nie implementuje kolejkowania, więc pod obciążeniem wywołania IO się kumulują.

  • Według Microsoft, ETW używa buforów pierścienia jądra który jest bardzo wydajny. . NET 4.5 i Framework dziennika zdarzeń w połączeniu z Semantic Logging Application Bock (AKA SLAB) uczynią to znacznie bardziej wydajnym.

 3
Author: random65537,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-09 19:14:28

Nie jestem fanem log4j ani log4net. Lubię java.util.net logging facility, a więc odtworzyłem go, w większości, na projekcie github o nazwie NetLog w https://github.com/greggwon/NetLog / . Prosimy o przesłanie opinii. Staram się trochę czasu, aby umieścić konfigurację opartą na ConfigurationManager w liu logowania.Plik Właściwości. Z Javą.util.logowanie, zawsze było wystarczająco łatwo użyć ustawień właściwości wiersza poleceń, aby określić, gdzie jest konfiguracja dziennika at. Jest to o wiele bardziej bolesne z. Net, jeśli nie korzystasz z ConfigurationManager. Zapewnienie wsparcia dla CM otworzy drzwi dla różnych relacji między rejestratorami i obsługującymi, co może poprawić niektóre rzeczy.

NetLog zawiera EventLogHandler, który będzie logował się do systemu eventlog. Ma również poziom.Poziom EventLog ustawiony na tuż poniżej "warning", co pozwoli Ci mieć nazwany "level" do kierowania blogiem EventLog bez użycia "WARNING " lub"SEVERE". I również mieć TCPSocketHandler, który pozwala telnet do "logging" tak, że można mieć "ogon" w systemie windows, bez" ogon " program jest dostępny.

 1
Author: grwww,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 23:28:46

Spójrz na NetLog.Rejestrowanie pakietu na Githubie, to moje dzieło. Ma aplikację monitorującą i podąża za Javą.util.logging API paradigm, bo to jest to, co lubię używać. Posiada blokadę spin lock dla dostępu do "zapisu", a uchwyt blokady zapisuje wszystkie rekordy w kolejce, do limitu, przed przejściem. Pozwoli to na to, aby rejestrowanie było mniej zgodne I / O i zapewnia dobry kompromis.

 0
Author: Grwon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-30 19:00:32

Z jakiegoś powodu System.Diagnostyka nie obsługuje sposobu kierowania całego wyjścia śledzenia do jednego słuchacza. Jeśli chcesz, aby kilka źródeł było kierowanych do tego samego słuchacza, musisz wyraźnie wymienić każde źródło po nazwie.

W dużym systemie z wieloma zależnościami możesz nie znać wszystkich źródeł i prawdopodobnie cię to nie obchodzi. Chcesz tylko, aby wyjście zobaczyło, co dzieje się pod kołdrą. Konieczność indywidualnego ustawienia słuchaczy dla każdego źródła sprawia, że korzystanie System.Diagnostyka znacznie trudniejsza do zastosowania w dużych systemach.

Log4net nie tylko obsługuje appender (listener) na poziomie roota, ale także obsługuje hierarchiczne logowanie, które pozwala skonfigurować logowanie dla logicznego zestawu źródeł jako grupę. Moim zdaniem to sprawia, że log4net jest oczywistym wyborem.

 0
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 17:19:13