log4net ve Nlog karşılaştırması


355

İkisi için tecrübesi olan var mı? Birbirlerine karşı nasıl birikiyorlar?

Bunlardan birini kurumsal bir uygulamada oturum açmak için kullanmayı planlıyoruz.

Referanslar:

log4net

nlog

DÜZENLEME: nlog veya log4net için mevcut bağımlılığımız yok.


9
Kullandığım logger: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", mesaj));
zumalifeguard

213
Aferin sana, ama bazı insanlar otomatikman vb eski günlük verileri silmek için, farklı günlük düzeylerini kullanmak, dinamik açık / kapalı günlüğünü açmak için yeteneği gerekebilir
Tor Hovland

23
Log4Net belgelerinin korkunç olduğu unutulmamalıdır.
BentOnCoding

Ayrıntılı bir blog yazısı var robertmccarter.com/switching-to-nlog
Michael Freidgeim

2
ReflectInsight'ı denemelisin. Hem insightextensions.codeplex.com'dan
code5

Yanıtlar:


383

Kısa süre önce yaklaşmakta olan bir proje için "bazı logları prototip haline getirme" görevi verildi. Günlük kaydı deneyimi yaşamadım. Log4Net, NLog ve Enterprise Library'de birkaç gün boyunca araştırdım, dersler verdim, oyuncak uygulamaları vb. Yaptım. 3-4 hafta sonra geri döndü ve bunları uyumlu bir demoya dönüştürdü. Umarım bunlardan bazıları sizin için yararlıdır.

Projem için önerim şudur:

  1. Doğrudan bağımlılıkları önlemek için bir kayıt cephesi kullanın (örn. Common.Logging , SimpleLoggingFacade ).
  2. Diğer kütüphaneler için Enterprise Library'yi kullanırsak, bunu Logging için de kullanın.
  3. Sonunda Log4Net'e bağımlı bir şey kullanırsak, Log4Net kullanın.
  4. Yukarıdakilerin hiçbiri değilse, NLog kullanın. Hangisini tercih ederim.

Bu, bu bulgulara dayanmaktadır (görüşler!):

  • 3 çerçevenin tümü yeteneklidir ve bazı karmaşık şeyler yapabilir. Kaliteli bir çözüm istiyoruz, ancak açıkçası ultra yüksek performansa veya 60 tip olay lavabosuna ihtiyaç duymuyoruz.
  • Her üçü de benzer temel kavramlara sahiptir.
  • Her birinin, gerçekten gelişmiş yönlendirme veya dinamik günlük dosya adları, dosya kısaltma vb.Gibi kendine özgü püf noktaları vardır.
  • Her üçü de kendi yollarıyla oldukça iyi belgelenmiştir.
  • Benim gibi tam bir yeni başlayan için, hepsi başlangıçta biraz garipti. Burada temeller için ciddi farklılıklar yok. Üstesinden geldim.
  • Birkaç hafta sonra işleri tekrar gözden geçirirken, NLog açıkça en kolay şekilde devam ettirildi . Üzerinde çok az fırçaya ihtiyacım vardı. Log4Net ile, devam etmek için birkaç çevrimiçi örneği tekrar ziyaret etmek zorunda kaldım. EntLib ile vazgeçtim ve öğreticiler baştan tekrar yaptım - tamamen kayboldum.
  • EntLib'in veritabanına giriş yapmak gibi bazı şeyleri nasıl yapacağını anlayamadım. Kolay olabilir, ama zaman sınırımın ötesindeydi.
  • Log4Net ve NLog küçük bir kod içi kaplama alanına sahiptir. EntLib spamdir, ama yine de üzerinde bir cephe kullanırdım.
  • EntLib'i yanlışlıkla yanlış yapılandırdım ve bana çalışma zamanında söyledi. Log4Net olmadı. NLog ile yanlışlıkla yanlış yapılandırma yapmadım.
  • EntLib,% 100 ihtiyacınız olan güzel görünümlü bir app.config editörü ile birlikte gelir. NLog bir yapılandırma dosyası şemasına sahiptir, böylece "intellisense" elde edersiniz. Log4Net nada ile birlikte gelir.

Açıkçası NLog'u şimdiye kadar seviyorum. Yine de başka bir çözüme sahip olmasına rağmen kullanmak için yeterli değil.


19
Gerçek Endişelerin Ayrılması (SoC) için bir Cephe inşa etmeyi önermeniz durumunda +1 veya alanınızı yok saymazsınız.
eduncan911

66
Eğer ben çok zarar erdi bu temel tanı özellikleri kırmak cephelerinin bir sürü gördüm vb çağrı yığını bağlıdır tanı değerlerini, bozmadan bunu eğer cephe yalnızca çalıştığını iyi ...
James Schek

11
Log4Net, System.Web'e başvurduğundan .NET 3.5 SP1 ve .NET 4 İstemci Profillerini henüz desteklememektedir. Sadece şunu belirtmek istedim, ancak 'Log4Net'e bağımlı olarak Log4Net'i kullanın.'
Simon D.12

59
LogogNet, 19 Nisan 2006'da yayınlanmış 1.2.10 sürümünden bu yana güncellenmemişken NLog aktif olarak desteklenmektedir ( nlog-project.org/download ) ( issue.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta

5
Log4net kullanan bir kitaplığa bağımlılığınız varsa ve bunun yerine NLog kullanmak istiyorsanız (ya da tam tersi), ikisi arasında köprü oluşturmak için özel bir Appender sınıfı yazmak ve yapılandırmak oldukça basittir.
dbkk

158

Çok tartışılmayan önemli bir husus, destek ve güncellemelerdir.

Log4Net, 1.2.10 sürümü 19 Nisan 2006'da yayımlandığından beri güncellenmemiştir .

Buna karşılık, NLog 2006'dan beri aktif olarak desteklenmektedir, yakında log4net en son güncellendiğinde mevcut olmayan birçok platformu destekleyen NLog 2.0'ı piyasaya sürecektir :

  • NET Framework 2.0 SP1 ve üstü, 3.5 ve 4.0 (İstemci ve Genişletilmiş profiller)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Mono 2.x profili

30
Ancak güncellenmesi gerekiyor mu? Eğer kırık değilse, tamir etmeyin?
glenneroo

24
Edilir kırılmış: Vista ve Win7 localhost için IPv4 / IPv6 arasındaki * messes kadar ip adresi çözünürlüğü (birkaç gayri resmi yamalar etrafında yüzen) * Net 4.0 Müşteri profilinde derlemek yapmaz
Tormod Hystad

6
Log4Net çalışmalarında bir .NET 4.0 sürümü var gibi görünüyor.
scope_creep

38
log4net Ekim 2011'de v1.2.11'i başlattı . Bu cevabın artık geçersiz olduğunu düşünüyorum.
Mariano Desanze

83
Aslında, bu cevap benim için hala değerliydi. Bir logger seçme sürecindeyim ve bu cevap bize log4net'in son yarım on yılda bir güncellendiğini, NLog ise daha aktif bir proje olduğunu söylüyor.
Batibix

97

Son zamanlarda her iki çerçeve ile de bir deneyim yaşadım, her çerçeve hakkındaki görüşlerimi paylaşabileceğimi düşündüm.

Mevcut bir web uygulaması için günlük çerçevelerini değerlendirmem istendi, çeşitli çevrimiçi forumlardan geçtikten sonra seçimlerimi NLog (v2.0) ve log4net'e (v1.2.11) daralttım. İşte bulgularım:

  1. NLog ile ayarlama / başlatma çok kolaydır. Web sitelerinde Başlarken eğiticisinden geçiyorsunuz ve işlem tamam. Adil bir fikir, nlog ile nasıl bir şey olabilir. Config dosyası o kadar sezgiseldir ki herkes config'i anlayabilir. Örneğin: dahili günlüğe kaydetmeyi etkinleştirmek istiyorsanız, bayrağı Nlog yapılandırma dosyasının başlık düğümünde (beklediğiniz yerde) ayarlarsınız. Log4net'te web.config uygulamasının appSettings bölümünde farklı bayraklar ayarlarsınız.

  2. Log4net'te, dahili günlük kaydı can sıkıcı bir zaman damgası vermez. Nlog'da, zaman damgalarıyla güzel bir günlük elde edersiniz. Değerlendirmelerimde çok yararlı buldum.

  3. Log4net'teki filtreler - Bu soruyu kontrol etseniz iyi olur - log4net filtresi - günlük mesajlarını yoksaymak için nasıl AND yazılır ve filtre uygularsanız, bunun için bir cevap / çözüm bulursanız lütfen bize bildirin. Anlıyorum, kendi özel filtrenizi yazabileceğiniz için bu soru için bir geçici çözüm var. Ancak log4net'te kolayca bulunmayan bir şey.

  4. Performans - Saklı yordam kullanarak veritabanına yaklaşık 3000 günlük iletisi kaydettim. Ben döngü için basit kullandım (int i = 0; i <3000; i ++ ... aynı mesajı 3000 kez günlüğe kaydetmek için yazdım. Log4net AdoAppender NLog'dan neredeyse iki kat daha fazla zaman aldı.

  5. Log4net, eşzamansız ekleyiciyi desteklemiyor.

Günlük kaydı olarak NLog'u seçmek benim için yeterli bir karşılaştırmaydı. :)



36

Bu iş parçacığına geç kalanlar için .Net Base Sınıf Kütüphanesi'ne (BCL) bir göz atmak isteyebilirsiniz. TraceSource sınıfı tanıtıldığında birçok kişi .Net 1.1 ve .Net 2.0 arasındaki değişiklikleri kaçırdı (yaklaşık 2005).

TraceSource'un kullanılması, günlük kaydı, app.config / web.config dosyasında yapılandırma ve programlı erişim ile kurumsal uygulama bloğunun ek yükü olmadan diğer günlük çerçevelerine benzer.

Ayrıca etrafında yüzen bir çok karşılaştırma vardır: "log4net vs TraceSource"


1
EntLib TraceSource
Michael Freidgeim,

34

Bizim için en önemli fark genel anlamda ...

Logger.IsDebugEnabledNLog'a Log4Net'e bir göz atın , testlerimizden NLog'un daha az yükü var ve peşinde olduğumuz şey bu (düşük gecikmeli şeyler).

Şerefe, Florian


25

Önce yığınının geri kalanına bak.

NHibernate kullanıyorsanız, doğrudan Log4Net kullanır. Diğer çerçevelerde ihtiyaç duydukları başka belirli kaydediciler olabilir.

Bunun dışında: her ikisi de iyi çalışıyor.

Log4Net'e kendim yerleştim. Yapılandırmak bir acı olabilir ve doğru yapılandırılmamışsa neyin yanlış gittiğini anlamak bir acıdır. Ama bir kaydediciden istediğiniz her şeyi yapmasını sağlayabilirsiniz.

Log4Net ile ilgili bir sorununuz yoksa, nasıl başlayacağınız hakkında yazdığım bir makale: http://elegantcode.com/2007/12/07/getting-started-with-log4net/


9
@greg: NHibernate v3'te log4net'e olan bağımlılığın minnetle kaldırıldığını unutmayın - takılabilir, böylece isterseniz NLog'u kullanabilirsiniz.
UpTheCreek

NLog, neyin yanlış olduğunu da yapılandırmak / anlamak için eşit bir acıdır. En azından log4net ile belgeler ve / veya sorunlar için google bulabilirsiniz.
Mrchief

Yığının geri kalanını dikkate almanın iyi bir noktası, bunun kafamın üstünde düşüneceğim bir endişe olduğunu söyleyemem. NHibernate artık bu senaryo için bir örnek değil gibi görünse de, Sitecore, Log4Net'i dahili olarak kullandığı için bunun çağdaş bir örneğini sunmaktadır. Sitecore oldukça genişletilebilir, bu nedenle oturum açmak istediğiniz her şeyi kullanabilirsiniz, ancak bu, kendi kaydedicilerinizi eklemek için sitenin web.config dosyasını düzenlemekten çok daha karmaşıktır
Scott Simontis


14

Yukarıdakileri tekrarlıyorum ve nLog'u tercih ediyorum. Entlib gereksiz yere şişirilir.

Re: Log4net HER ZAMAN log4net ile beni alır bir şey bileşeni başlatmak için global.asax aşağıdaki eklemeyi unutmaktır:

log4net.Config.XmlConfigurator.Configure();

13

Gidersen burada sen nlog ve Log4Net kütüphaneleri yanı sıra Kurumsal Lib ve diğer ürünlerini içerir kapsamlı bir matris bulabilirsiniz.

Birisi, matrisin, matristeki mevcut tek ticari lib'in özelliklerinin altını çizecek şekilde yapıldığını iddia edebilir. Doğru olduğunu düşünüyorum ama seçimimi NLog karşı götürmek için yine de yararlı oldu.

Saygılarımızla


1
Bu matrise bakıldığında, en azından ticari bir rakip olan Object Guy'ın çerçevesine göre oldukça güncel görünmüyor.
Andy Dent

9

Fark ettiğim gibi, log4net çıktı dosyalarını uygulama çalışırken sürekli kilitler, böylece onları silemezsiniz. Aksi takdirde benzerdirler.

Bu yüzden NLog'u tercih ederim.


22
Bunu önlemek için fileappender yapılandırmanıza <kilitlemeModel türü = "log4net.Appender.FileAppender + MinimalLock" /> ekleyin (log4net örnekler sayfasında belirtilmiştir: logging.apache.org/log4net/release/config-examples.html )
EventHorizon

9

Çalıştığım açık kaynaklı bir proje için utanmaz fiş, ancak hangi .NET günlük kaydı çerçevesinin daha aktif olduğu hakkında canlı tartışma verildiğinde Serilog'a zorunlu bir bağlantı yayınlayacağımı düşündüm .

Bir uygulamada kullanmak için, Serilog log4net'e benzer (ve çok fazla çizer). Bununla birlikte, diğer .NET günlüğü seçeneklerinin aksine, Serilog çevrimdışı analiz için günlük olaylarının yapısını korumakla ilgilidir. Yazarken:

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

Çoğu günlük kitaplığı iletiyi bir dizeye dönüştürür. Serilog bunu da yapabilir, ancak { Answer: 42 }daha sonra NoSQL veri depolarından birini kullanarak olayları değerine göre düzgün bir şekilde sorgulayabilmeniz için özelliği korur Answer.

1.0'a yaklaştık ve tüm modern (.NET 4.5, Windows Mağazası ve Windows Phone 8) platformlarını destekliyoruz.


Ama soru şu: Mono'yu destekliyor mu? ;) Umut verici görünüyor (ve iplik ve iğne logosunu seviyorum) ancak Mono'yu destekleyip desteklemediğine dair herhangi bir bilgi bulamadı.
ashokgelal

İyi soru :) ... evet, Mono'da kullanıcılarımız var - Serilog'un .NET 4.5 veya 4.0 derlemesini kullanıp kullanmadığından emin değilim, ancak herhangi bir sorunla karşılaşırsanız size yardımcı olacağız.
Nicholas Blumhardt

.NET 4.5 desteği beni hemen
Fat Shogun

8

Ben de yönetilmeyen kod ile çalışır çünkü NLog ikinci. Log4net ve log4cxx'i birlikte kullanmak mümkün olabilir, ancak NLog hem yönetilen hem de yönetilmeyen kodu kutudan çıkarır.

Ayrıca loging api'nin soyutlamasını yapan bir cephe olan Common.Logging'e de baktım, log4net, NLog ve Entreprise Library'yi destekliyor. Bunu kullanacağımı düşünmüyorum, ancak günlük kaydı devre dışı bırakıldığında (NLog ve muhtemelen diğerleriyle paylaşılan bir özellik) performansı artırmak için lambdas'ı nasıl kullandıklarını seviyorum.


4

Microsoft Enterprise Library Günlük Kaydı'nı da düşünebilirsiniz . Güzel tasarımcı ile geliyor.


3
El işçiliği XML'sinin aksine görsel olarak yapılandırmanızı sağlar. Zevkinize bağlı ...
Rashack

13
Böyle bir şey için görsel araçlar kullanma fikri iyi bir şey değildir.
Adam Dymitruk

4
Belki iyi bir şey değil, ama EntLib görsel konfigüratör için gereklidir. Konfigürasyonu manuel olarak yazmak neredeyse imkansız, çok karmaşık (Biliyorsunuz, Microsoft'tan).
Pavel Hodek

1
Birisi görsel bir tasarımcıdan hoşlanmasa bile, neden aşağı oy verin! : o
nawfal

EntLib eşzamanlı olarak günlüğe kaydetme yapar, aslında performansı etkileyebilir.
Michael Freidgeim

2

Bence genel fikir birliği, nlog'un yapılandırılması ve kullanımı biraz daha kolay olmasıdır. Her ikisi de oldukça yetenekli.


0

Deneyimlerime dayanarak, SmartInspect hem NLog hem de log4net'i atıyor.

Kullanımı son derece kolay, belgeler harika ve önceden kaydedilmiş mesajları görüntüleyebilir ve filtreleyebilirsiniz interaktif günlük görüntüleyici ile , bu da büyük bir gerçek dünya avantajıdır.

Sevdiğim bir şey, Chrome'daki tarayıcı sekmeleri gibi verilerin sekmeli görünümleridir. Her sekme günlüğün filtrelenmiş farklı bir görünümünü sağlayabilir.


11
Ücretli bir üründür. NLog & Log4Net ücretsizdir.
Zo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.