log4net vs. Nlog


355

Czy ktoś ma doświadczenie w obu przypadkach? Jak się ze sobą zestawiają?

Planujemy użyć jednego z nich do logowania się w aplikacji korporacyjnej.

Bibliografia:

log4net

nlog

EDYCJA: Nie mamy żadnych zależności od nlog lub log4net.


9
To jest logger, którego używam: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", wiadomość));
zumalifeguard

213
To dobrze dla Ciebie, ale niektóre osoby mogą potrzebować możliwości dynamicznego włączania / wyłączania logowania, korzystania z różnych poziomów dziennika, automatycznego usuwania starych danych dziennika itp.
Tor Hovland,

23
Należy zauważyć, że dokumentacja Log4Net jest okropna.
BentOnCoding


2
Powinieneś spróbować ReflectInsight. Znacznie silniejszy niż oba insightextensions.codeplex.com
code5

Odpowiedzi:


383

Niedawno otrzymałem zadanie „prototypowania loginu” dla nadchodzącego projektu. Nie miałem żadnego doświadczenia w logowaniu. Przez kilka dni przeglądałem samouczki, tworzyłem aplikacje zabawkowe itp. W Log4Net, NLog i Enterprise Library. Wróć 3-4 tygodnie później i połącz je w spójne demo. Mam nadzieję, że niektóre z nich są dla Ciebie przydatne.

Moja rekomendacja dla naszego projektu jest następująca:

  1. Użyj fasady rejestrowania (np. Common.Logging , SimpleLoggingFacade ), aby uniknąć bezpośrednich zależności.
  2. Jeśli ostatecznie skorzystamy z Biblioteki korporacyjnej do innych obiektów, użyj jej również do rejestrowania.
  3. Jeśli ostatecznie wykorzystamy coś zależnego od Log4Net, użyj Log4Net.
  4. Jeśli nie ma żadnej z powyższych opcji, użyj NLog. Który wolałbym.

Jest to oparte na tych ustaleniach (opiniach!):

  • Wszystkie 3 frameworki są zdolne i potrafią robić pewne zaawansowane rzeczy. Chcemy rozwiązania wysokiej jakości, ale szczerze mówiąc, nie potrzebujemy ultra wysokiej wydajności ani 60 rodzajów odbiorników zdarzeń.
  • Wszystkie 3 mają bardzo podobne podstawowe pojęcia.
  • Każdy ma swoje własne fajne sztuczki, takie jak naprawdę zaawansowany routing lub dynamiczne nazwy plików dziennika, obcinanie plików itp.
  • Wszystkie 3 są dość dobrze udokumentowane na swój własny sposób.
  • Zupełnie nowi jak ja, początkowo wszyscy byli trochę niezręczni. Nie ma tutaj drastycznych różnic dotyczących podstaw. Przeszedłem przez to.
  • Po ponownym przejrzeniu kilku tygodni później NLog był najwyraźniej najłatwiejszy do wznowienia. Potrzebowałem bardzo mało pędzla. Dzięki Log4Net musiałem ponownie zapoznać się z kilkoma przykładami online, aby zacząć. W EntLib zrezygnowałem i samouczki od początku wykonałem od nowa - byłem całkowicie zagubiony.
  • Nie mogłem wymyślić, jak skłonić EntLib do wykonania takich czynności, jak logowanie do bazy danych. To może być łatwe, ale przekroczyło mój limit czasowy.
  • Log4Net i NLog mają mały ślad w kodzie. EntLib jest spamem, ale i tak użyłbym nad nim fasady.
  • Przypadkowo źle skonfigurowałem EntLib i powiedział mi to w czasie wykonywania. Log4Net nie. Nie miałem przypadkowej błędnej konfiguracji z NLog.
  • EntLib zawiera przyjemnie wyglądający edytor app.config, którego potrzebujesz w 100%. NLog ma schemat pliku konfiguracyjnego, więc otrzymujesz „intellisense”. Log4Net ma nada.

Więc oczywiście do tej pory lubię NLog. Jednak nie wystarczy, aby go użyć, mimo że dostępne jest inne rozwiązanie.


19
+1 za zalecenie budowy fasady dla prawdziwej separacji obaw (SoC), aby nie zanieczyszczać domeny.
eduncan911

66
Fasada działa tylko wtedy, gdy możesz to zrobić bez przełamywania wartości diagnostycznych zależnych od stosu wywołań itp. Widziałem wiele fasad, które łamią te podstawowe funkcje diagnostyczne, które ostatecznie wyrządziły więcej szkody niż to ...
James Schek

11
Log4Net nie obsługuje jeszcze profili klientów .NET 3.5 SP1 i .NET 4, ponieważ odwołuje się do System.Web. Chciałem tylko to podkreślić, chociaż jest to ściśle związane z „zależnością od Log4Net, użyj Log4Net”.
Simon D.

59
NLog jest aktywnie wspierany ( nlog-project.org/download ), podczas gdy Log4Net nie został zaktualizowany od czasu opublikowania wersji 1.2.10 opublikowanej 19 kwietnia 2006 r. ( Issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta,

5
Jeśli masz zależność od biblioteki używającej log4net i chcesz zamiast tego użyć NLog (lub odwrotnie), dość łatwo jest napisać i skonfigurować niestandardową klasę Appendera w celu połączenia tych dwóch.
dbkk

158

Kluczowym zagadnieniem, o którym niewiele się dyskutuje, jest wsparcie i aktualizacje.

Log4Net nie został zaktualizowany od czasu opublikowania wersji 1.2.10 19 kwietnia 2006 r .

Natomiast NLog jest aktywnie wspierany od 2006 r. Wkrótce wyda NLog 2.0 obsługujący wiele platform, które nie istniały podczas ostatniej aktualizacji log4net, takie jak:

  • NET Framework 2.0 SP1 i nowszy, 3.5 i 4.0 (klient i profile rozszerzone)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Profil Mono 2.x.

30
Ale czy wymaga aktualizacji? Jeśli to nie jest zepsute, nie naprawiaj tego?
glenneroo,

24
To jest uszkodzony: Rozdzielczość * bałagan adres ip pomiędzy IPv4 / IPv6 dla localhost na Vista i Win7 (kilka nieoficjalne patche są pływających wokół) * Nie skompilować w .NET 4.0 Client Profile
Tormod Hystad

6
Wygląda na to, że w programie Log4Net działa wersja .NET 4.0.
scope_creep

38
log4net uruchomił wersję 1.2.11 w październiku 2011 r . Myślę, że ta odpowiedź jest już nieaktualna.
Mariano Desanze

83
Właściwie ta odpowiedź wciąż była dla mnie cenna. Jestem w trakcie wybierania rejestratora, a ta odpowiedź mówi nam, że log4net został zaktualizowany raz w ostatniej połowie dekady, podczas gdy NLog jest bardziej aktywnym projektem.
Batibix,

97

Mając ostatnio doświadczenie z obiema platformami, pomyślałem, że mogę podzielić się swoimi poglądami na temat każdej z platform.

Zostałem poproszony o ocenę ram rejestrowania dla istniejącej aplikacji internetowej, zawęziłem swoje możliwości do NLog (v2.0) i log4net (v1.2.11) po przejściu przez różne fora internetowe. Oto moje ustalenia:

  1. Założenie / uruchomienie z NLog jest bardzo łatwe. Przejdziesz samouczek Pierwsze kroki na ich stronie internetowej i gotowe. Masz dobry pomysł, jak może wyglądać nlog. Plik konfiguracji jest tak intuicyjny, że każdy może zrozumieć konfigurację. Na przykład: jeśli chcesz ustawić logowanie wewnętrzne, ustaw flagę w węźle nagłówka pliku konfiguracyjnego Nlog, czyli tam, gdzie się tego spodziewałeś. W log4net ustawiasz różne flagi w sekcji appSettings aplikacji web.config.

  2. W log4net rejestrowanie wewnętrzne nie generuje irytującego znacznika czasu. W Nlogu masz ładny dziennik ze znacznikami czasu. Uznałem, że jest to bardzo przydatne w moich ocenach.

  3. Filtry w log4net - Lepiej sprawdź moje pytanie - filtr log4net - jak pisać ORAZ filtr, aby ignorować komunikaty dziennika, a jeśli znajdziesz na to odpowiedź / rozwiązanie, daj mi znać. Rozumiem, że istnieje możliwość obejścia tego pytania, ponieważ możesz napisać własny filtr niestandardowy. Ale coś, co nie jest łatwo dostępne w log4net.

  4. Wydajność - zalogowałem około 3000 komunikatów dziennika do bazy danych przy użyciu procedury składowanej. Użyłem simple for loop (int i = 0; i <3000; i ++ ... aby zarejestrować tę samą wiadomość 3000 razy. Do zapisu: log4net AdoAppender zabrał prawie dwa razy więcej czasu niż NLog.

  5. Log4net nie obsługuje asynchronicznego programu dołączającego.

Wystarczyło porównanie, aby wybrać NLog jako środowisko rejestrowania. :)


Wewnętrzne dzienniki debugowania log4net: logging.apache.org/log4net/release/sdk/…
Narayan Akhade

36

Dla każdego, kto spóźni się na ten wątek, warto zajrzeć do biblioteki bazowej .Net Base Class Library (BCL). Wiele osób nie zauważyło zmian między .Net 1.1 a .Net 2.0, kiedy wprowadzono klasę TraceSource (około 2005).

Korzystanie z TraceSource jest podobne do innych platform rejestrowania, z dokładną kontrolą rejestrowania, konfiguracją w app.config / web.config i dostępem programowym - bez narzutu na blok aplikacji korporacyjnych.

Istnieje także szereg porównań: „log4net vs TraceSource”


1
EntLib rozszerza TraceSource
Michael Freidgeim

34

Dla nas kluczową różnicą jest ogólna perf ...

Spójrz na Logger.IsDebugEnabledNLog kontra Log4Net, z naszych testów NLog ma mniejszy narzut i właśnie o to nam chodzi (rzeczy o niskim opóźnieniu).

Na zdrowie, Florian


25

Najpierw spójrz na resztę swojego stosu.

Jeśli korzystasz z NHibernate, korzysta on bezpośrednio z Log4Net. Inne platformy mogą mieć inne specyficzne programy rejestrujące, których potrzebują.

Poza tym: oba działają dobrze.

Sam zdecydowałem się na Log4Net. Konfiguracja może być uciążliwa, a jeśli nie jest poprawnie skonfigurowana, trudno jest dowiedzieć się, co poszło nie tak. Ale możesz zmusić go do robienia wszystkiego, co chcesz od rejestratora.

Jeśli nie masz stałego problemu z Log4Net, oto artykuł, który napisałem o tym, jak zacząć: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg: Zauważ, że w NHibernate v3 zależność od log4net jest na szczęście usunięta - można ją podłączyć, więc możesz użyć NLog, jeśli chcesz.
UpTheCreek

NLog jest równie trudny do skonfigurowania / ustalenia, co jest nie tak. Przynajmniej z log4net możesz znaleźć dokumentację i / lub google dla problemów.
Mrchief

Warto wziąć pod uwagę resztę swojego stosu, nie mogę powiedzieć, że to problem, który wziąłbym pod uwagę. Chociaż wygląda na to, że NHibernate nie jest już przykładem dla tego scenariusza, Sitecore stanowi współczesny przykład tego, ponieważ używa Log4Net wewnętrznie. Sitecore jest dość rozszerzalny, więc możesz użyć tego, co wolisz zalogować, ale jest to o wiele bardziej skomplikowane niż edytowanie pliku web.config witryny w celu dodania własnych rejestratorów
Scott Simontis


14

Powtarzam powyższe i wolę nLog. Entlib jest niepotrzebnie wzdęty.

Re: Log4net Jedną z rzeczy, którą ZAWSZE mnie loguje do log4net, jest zapomnienie o dodaniu następujących elementów do pliku global.asax w celu zainicjowania komponentu:

log4net.Config.XmlConfigurator.Configure();

13

Jeśli pójdziesz tutaj , znajdziesz kompleksową matrycę, która obejmuje zarówno biblioteki NLog i Log4Net, jak i Enterprise Lib i inne produkty.

Ktoś mógłby argumentować, że matryca jest wykonana w sposób podkreślający cechy jedynej komercyjnej biblioteki lib znajdującej się w matrycy. Myślę, że to prawda, ale i tak przydał się mój wybór w porównaniu do NLog.

pozdrowienia


1
Patrząc na tę matrycę, wydaje się ona znacznie nieaktualna, przynajmniej w odniesieniu do frameworka The Object Guy, który jest konkurentem komercyjnym.
Andy Dent,


9

Bezwstydna wtyczka do projektu typu open source, który prowadzę, ale biorąc pod uwagę ożywioną dyskusję na temat tego, które ramy rejestrowania .NET są bardziej aktywne, pomyślałem, że opublikuję obowiązkowy link do Serilog .

Aby korzystać z aplikacji, Serilog jest podobny do log4net (i czerpie z niego dużo). Jednak w przeciwieństwie do innych opcji rejestrowania .NET, Serilog polega na zachowaniu struktury zdarzeń dziennika do analizy offline. Kiedy piszesz:

Log.Information("The answer is {Answer}", 42);

Większość bibliotek rejestrujących natychmiast renderuje komunikat w ciąg. Serilog też może to zrobić, ale zachowuje tę { Answer: 42 }właściwość, aby później, korzystając z jednego z wielu magazynów danych NoSQL, można poprawnie wyszukiwać zdarzenia na podstawie wartości Answer.

Jesteśmy blisko wersji 1.0 i obsługujemy wszystkie nowoczesne platformy (.NET 4.5, Windows Store i Windows Phone 8).


Ale pytanie brzmi: czy obsługuje Mono? ;) Wygląda obiecująco (i uwielbiam logo nici i igły), ale nie mogłem znaleźć żadnych informacji na temat tego, czy obsługuje Mono, czy nie.
ashokgelal

Dobre pytanie :) ... tak, mamy użytkowników na Mono - nie jestem pewien, czy używają kompilacji Serilog .NET 4.5 lub 4.0, ale jeśli napotkasz jakieś problemy, pomożemy.
Nicholas Blumhardt

Wsparcie .NET 4.5 mnie, pobieranie i wypróbowanie rozwiązania teraz
Fat Shogun

8

Drugi też NLog, ponieważ działa również z niezarządzanym kodem. Podejrzewam, że można używać log4net i log4cxx razem, ale NLog obsługuje zarówno kod zarządzany, jak i niezarządzany po wyjęciu z pudełka.

Spojrzałem również na Common.Logging , fasadę, która tworzy abstrakcję interfejsu logowania, obsługuje log4net, NLog i bibliotekę Entreprise. Nie sądzę, że będę go używał, ale podoba mi się, jak używają lambdas do poprawy wydajności, gdy logowanie jest wyłączone (funkcja współdzielona z NLog i prawdopodobnie innymi).


4

Możesz również rozważyć blok rejestrowania biblioteki Microsoft Enterprise Library . Pochodzi z miłym projektantem.


3
Umożliwia konfigurację wizualną w przeciwieństwie do ręcznego tworzenia XML. Zależy od twojego gustu ...
Rashack

13
Pomysł użycia do tego celu narzędzi wizualnych nie jest dobry.
Adam Dymitruk

4
Może nie jest to dobra rzecz, ale dla EntLib wymagany jest konfigurator wizualny. Ręczne pisanie konfiguracji jest praktycznie niemożliwe, jest zbyt skomplikowane (wiesz, że pochodzi od Microsoft).
Pavel Hodek,

1
Nawet jeśli ktoś nie lubił wizualnego projektanta, dlaczego głosować za nim! : o
nawfal

EntLib rejestruje się synchronicznie, może zasadniczo obniżyć wydajność.
Michael Freidgeim,

2

Myślę, że ogólny konsensus jest taki, że nlog jest nieco łatwiejszy do skonfigurowania i używania. Oba są jednak całkiem zdolne.


0

Na podstawie mojego doświadczenia, SmartInspect pokonuje zarówno jak i log4net.

Jest niezwykle łatwy w użyciu, dokumentacja jest świetna, a Ty możesz przeglądać i filtrować wcześniej zarejestrowane wiadomości pomocą interaktywnej przeglądarki dziennika , co stanowi ogromną zaletę w świecie rzeczywistym.

Jedną z rzeczy, które lubię, są widoki danych na kartach, takie jak karty przeglądarki w Chrome. Każda karta może zapewniać inny filtrowany widok dziennika.


11
To jest płatny produkt. NLog i Log4Net są bezpłatne.
Zo ma
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.