log4net vs. Nlog

355

Adakah yang punya pengalaman untuk keduanya? Bagaimana mereka saling menumpuk?

Kami berencana menggunakan salah satunya untuk masuk dalam aplikasi perusahaan.

Referensi:

log4net

nlog

EDIT: Kami tidak memiliki dependensi yang ada untuk nlog atau log4net.

Greg Dean
sumber
9
Ini adalah logger yang saya gunakan: System.IO.File.AppendAllText (@ "c: \ log.txt", string.Format ("{0} \ r \ n", message));
zumalifeguard
213
Baik untuk Anda, tetapi beberapa orang mungkin memerlukan kemampuan untuk mengaktifkan / menonaktifkan logging secara dinamis, untuk menggunakan level log yang berbeda, untuk secara otomatis menghapus data log yang lama, dll.
Tor Hovland
23
Perlu dicatat bahwa dokumentasi Log4Net sangat buruk.
BentOnCoding
Ada posting blog terinci robertmccarter.com/switching-to-nlog
Michael Freidgeim
2
Anda harus mencoba ReflectInsight. Jauh lebih kuat daripada kedua insightextensions.codeplex.com
code5

Jawaban:

383

Saya baru-baru ini ditugaskan untuk "membuat beberapa loggin '" untuk proyek yang akan datang. Saya tidak punya pengalaman kerangka kerja logging. Saya meneliti, menjalankan tutorial, membuat aplikasi mainan, dll di Log4Net, NLog, dan Perpustakaan Perusahaan selama beberapa hari. Datang kembali 3-4 minggu kemudian dan menempatkan mereka bersama dalam demo yang kohesif. Semoga beberapa di antaranya bermanfaat bagi Anda.

Rekomendasi saya untuk proyek kami adalah ini:

  1. Gunakan fasad logging (mis. Common.Logging , SimpleLoggingFacade ) untuk menghindari ketergantungan langsung.
  2. Jika kita akhirnya menggunakan Perpustakaan Perusahaan untuk fasilitas lain, maka gunakan juga untuk Logging.
  3. Jika kita akhirnya menggunakan sesuatu dengan ketergantungan pada Log4Net, gunakan Log4Net.
  4. Jika tidak ada yang di atas, gunakan NLog. Yang saya lebih suka.

Itu berdasarkan temuan ini (pendapat!):

  • Ketiga kerangka kerja ini mampu dan dapat melakukan beberapa hal canggih. Kami menginginkan solusi yang berkualitas, tetapi terus terang tidak perlu kinerja sangat tinggi atau 60 jenis acara.
  • Semua 3 memiliki konsep dasar yang sangat mirip.
  • Masing-masing memiliki trik kerennya sendiri, seperti perutean yang sangat canggih, atau nama file log dinamis, pemotongan file, dll.
  • Semua 3 didokumentasikan dengan cukup baik dengan cara mereka sendiri.
  • Untuk pemula yang lengkap seperti saya, mereka semua agak canggung pada awalnya. Tidak ada perbedaan drastis di sini untuk dasar-dasarnya. Saya mengatasinya.
  • Ketika meninjau kembali beberapa minggu kemudian, NLog jelas yang paling mudah untuk melanjutkan. Saya perlu sangat sedikit memolesnya. Dengan Log4Net, saya harus mengunjungi kembali beberapa contoh online untuk memulai. Dengan EntLib, saya menyerah dan melakukan tutorial lagi dari awal - saya benar-benar tersesat.
  • Saya tidak tahu cara mendapatkan EntLib untuk melakukan beberapa hal seperti login ke database. Mungkin mudah, tetapi itu melampaui batas waktu saya.
  • Log4Net dan NLog memiliki jejak kecil dalam kode. EntLib adalah spam, tapi saya tetap akan menggunakan fasad untuk itu.
  • Saya tidak sengaja mengonfigurasi EntLib dan memberitahu saya saat dijalankan. Log4Net tidak. Saya tidak memiliki kesalahan konfigurasi secara tidak sengaja dengan NLog.
  • EntLib hadir dengan editor app.config yang terlihat bagus, yang Anda butuhkan 100%. NLog memiliki skema file konfigurasi sehingga Anda mendapatkan "intellisense". Log4Net hadir dengan nada.

Jadi jelas saya suka NLog sejauh ini. Namun, tidak cukup untuk menggunakannya meskipun ada solusi lain yang tersedia.

Mat
sumber
19
+1 dalam merekomendasikan membangun Fasad untuk Seperation of Concerns (SoC) yang sebenarnya, atau Anda tidak mencemari domain Anda.
eduncan911
66
Fasad hanya berfungsi jika Anda dapat melakukannya tanpa melanggar nilai diagnostik yang bergantung pada tumpukan panggilan, dll. Saya telah melihat banyak fasad yang memecah fitur-fitur diagnostik penting ini yang pada akhirnya melakukan lebih banyak kerusakan yang baik ...
James Schek
11
Log4Net belum mendukung Profil Klien .NET 3.5 SP1 dan .NET 4, karena mereferensikan System.Web. Hanya ingin menunjukkan hal itu, meskipun sebenarnya terkait erat dengan 'dengan ketergantungan pada Log4Net, gunakan Log4Net.'
Simon D.
59
NLog secara aktif didukung ( nlog-project.org/download ) sementara Log4Net belum diperbarui sejak versi 1.2.10 diterbitkan diterbitkan 19 April 2006 ( issues.apache.org/jira/browse/LOG4NET/fixforversion/11128 )
Jay Cincotta
5
Jika Anda memiliki ketergantungan pada pustaka menggunakan log4net dan ingin menggunakan NLog sebagai gantinya (atau sebaliknya), cukup mudah untuk menulis dan mengkonfigurasi kelas Appender kustom untuk menjembatani keduanya.
dbkk
158

Pertimbangan utama yang belum banyak dibahas adalah dukungan dan pembaruan.

Log4Net belum diperbarui sejak versi 1.2.10 diterbitkan 19 April 2006 .

Sebaliknya, NLog telah didukung secara aktif sejak 2006 akan segera merilis NLog 2.0 yang mendukung banyak platform yang tidak ada ketika log4net terakhir diperbarui seperti:

  • NET Framework 2.0 SP1 dan di atasnya, 3.5 & 4.0 (Profil klien dan Diperpanjang)
  • Silverlight 2.0, 3.0, 4.0
  • .NET Compact Framework 2.0, 3.5
  • Profil Mono 2.x
Jay Cincotta
sumber
30
Tetapi apakah itu perlu diperbarui? Jika tidak rusak, jangan memperbaikinya?
glenneroo
24
Hal ini rusak: resolusi * messes up ip address antara IPv4 / IPv6 untuk localhost pada Vista dan Win7 (beberapa patch tidak resmi yang beredar) * Tidak mengkompilasi di Net Profil 4.0 Client
Tormod Hystad
6
Tampaknya ada versi .NET 4.0 dalam karya untuk Log4Net.
scope_creep
38
log4net telah meluncurkan v1.2.11 pada Oktober 2011 . Saya pikir jawaban ini sudah usang sekarang.
Mariano Desanze
83
Sebenarnya, jawaban ini masih berharga bagi saya. Saya sedang dalam proses memilih logger, dan jawaban ini memberi tahu kami bahwa log4net telah diperbarui sekali dalam setengah dekade terakhir, sementara NLog adalah proyek yang lebih aktif.
Batibix
97

Setelah memiliki pengalaman dengan kedua kerangka kerja baru-baru ini, saya pikir saya dapat berbagi pandangan tentang masing-masing kerangka kerja.

Saya diminta untuk mengevaluasi kerangka kerja logging untuk aplikasi web yang ada, saya mempersempit pilihan saya ke NLog (v2.0) dan log4net (v1.2.11) setelah melalui berbagai forum online. Inilah temuan saya:

  1. Pengaturan / memulai dengan NLog mudah mati. Anda pergi melalui tutorial Memulai di situs web mereka dan Anda selesai. Anda mendapatkan ide yang adil, bagaimana mungkin dengan nlog. File konfigurasi sangat intuitif sehingga siapa pun dapat memahami konfigurasi tersebut. Sebagai contoh: jika Anda ingin mengaktifkan log internal, Anda mengatur bendera di node header file konfigurasi Nlog, yang mana Anda harapkan. Di log4net, Anda mengatur flag yang berbeda di bagian appSettings web.config.

  2. Di log4net, logging internal tidak menampilkan timestamp yang mengganggu. Di Nlog, Anda mendapatkan log yang bagus dengan stempel waktu. Saya menemukannya sangat berguna dalam evaluasi saya.

  3. Filter di log4net - Sebaiknya Anda periksa pertanyaan saya ini - filter log4net - cara menulis DAN filter untuk mengabaikan pesan log dan jika Anda menemukan jawaban / solusi untuk ini, beri tahu saya. Saya mengerti, ada solusi untuk pertanyaan ini, karena Anda dapat menulis filter khusus sendiri. Tetapi sesuatu yang tidak mudah tersedia di log4net.

  4. Kinerja - Saya mencatat sekitar 3000 pesan log ke basis data menggunakan prosedur tersimpan. Saya menggunakan sederhana untuk loop (int i = 0; i <3000; i ++ ... untuk mencatat pesan yang sama 3000 kali. Untuk menulis: log4net AdoAppender butuh waktu hampir dua kali lipat dari NLog.

  5. Log4net tidak mendukung appynchronous appender.

Itu perbandingan yang cukup bagi saya untuk memilih NLog sebagai kerangka logging. :)

Narayan Akhade
sumber
log debugging internal log4net: logging.apache.org/log4net/release/sdk/…
Narayan Akhade
36

Bagi siapa pun yang terlambat mengunjungi utas ini, Anda mungkin ingin melihat kembali .Net Base Class Library (BCL). Banyak orang melewatkan perubahan antara .Net 1.1 dan .Net 2.0 ketika kelas TraceSource diperkenalkan (sekitar 2005).

Menggunakan TraceSource sangat mirip dengan kerangka logging lainnya, dengan kontrol granular dari logging, konfigurasi di app.config / web.config, dan akses terprogram - tanpa overhead blok aplikasi perusahaan.

Ada juga beberapa perbandingan yang beredar: "log4net vs TraceSource"

Jeremy
sumber
1
EntLib memperluas TraceSource
Michael Freidgeim
34

Bagi kami, perbedaan utama adalah ...

Lihat Logger.IsDebugEnableddi NLog versus Log4Net, dari pengujian kami, NLog memiliki overhead yang lebih sedikit dan itulah yang kami kejar (barang latensi rendah).

Cheers, Florian

Florian Doyon
sumber
25

Pertama lihat sisa tumpukan Anda.

Jika Anda menggunakan NHibernate, ia menggunakan Log4Net secara langsung. Kerangka kerja lain mungkin memiliki penebang khusus lain yang mereka butuhkan.

Selain itu: keduanya berfungsi dengan baik.

Saya sudah menetap di Log4Net sendiri. Mungkin sulit untuk dikonfigurasikan, dan jika tidak dikonfigurasikan dengan benar, akan sulit mengetahui apa yang salah. Tetapi Anda dapat membuatnya melakukan hampir semua hal yang Anda inginkan dari seorang penebang.

Jika Anda tidak memiliki masalah dengan Log4Net, berikut ini adalah artikel yang saya tulis tentang cara memulainya: http://elegantcode.com/2007/12/07/getting-started-with-log4net/

Chris Brandsma
sumber
9
@reg: Perhatikan bahwa di NHibernate v3 ketergantungan pada log4net untungnya dihapus - itu bisa digunakan sehingga Anda dapat menggunakan NLog jika diinginkan.
UpTheCreek
NLog adalah rasa sakit yang sama untuk mengkonfigurasi / mencari tahu apa yang salah juga. Setidaknya dengan log4net Anda dapat menemukan dokumentasi dan atau google untuk masalah.
Mrchief
Poin yang bagus untuk mempertimbangkan sisa tumpukan Anda, saya tidak bisa mengatakan itu adalah masalah yang akan saya pertimbangkan di atas kepala saya. Walaupun sepertinya NHibernate bukan lagi contoh untuk skenario ini, Sitecore memberikan contoh kontemporer tentang ini, karena menggunakan Log4Net secara internal. Sitecore cukup mudah dikembangkan, jadi Anda bisa menggunakan apa pun yang Anda inginkan untuk login, tetapi itu jauh lebih kompleks daripada mengedit situs web.config untuk menambahkan penebang Anda sendiri
Scott Simontis
14

Saya mengulangi hal di atas dan memang suka nLog. Entlib kembung tak perlu.

Re: Log4net Satu hal yang SELALU membuat saya dengan log4net lupa menambahkan berikut ini ke global.asax untuk memasukkan komponen:

log4net.Config.XmlConfigurator.Configure();
Francis Shanahan
sumber
13

Jika Anda pergi di sini, Anda dapat menemukan matriks komprehensif yang mencakup lib NLog dan Log4Net serta Enterprise Lib dan produk lainnya.

Seseorang bisa berpendapat bahwa matriks dilakukan dengan cara menggarisbawahi fitur-fitur dari hanya lib komersial yang ada dalam matriks. Saya pikir itu benar tetapi itu berguna pula untuk mengarahkan pilihan saya versus NLog.

Salam

Lorenzo
sumber
1
Melihat matriks itu tampaknya sudah ketinggalan zaman sehubungan dengan setidaknya kerangka kerja The Object Guy, yang merupakan pesaing komersial.
Andy Dent
9

Seperti yang saya perhatikan, log4net mengunci file output mereka sepanjang waktu aplikasi berjalan, jadi Anda tidak dapat menghapusnya. Kalau tidak, mereka serupa.

Jadi saya lebih suka NLog.

Vitaliy Ulantikov
sumber
22
Tambahkan <lockingModel type = "log4net.Appender.FileAppender + MinimalLock" /> ke konfigurasi fileappender Anda untuk mencegah hal ini (disebutkan pada halaman contoh log4net di sini: logging.apache.org/log4net/release/config-examples.html )
EventHorizon
9

Plug shameless untuk proyek open source yang saya jalankan, tetapi mengingat diskusi yang hidup tentang .NET logging framework yang lebih aktif, saya pikir saya akan memposting tautan wajib ke Serilog .

Untuk digunakan dalam suatu aplikasi, Serilog mirip dengan (dan menarik banyak pada) log4net. Tidak seperti opsi .NET logging lainnya, Serilog adalah tentang menjaga struktur peristiwa log untuk analisis offline. Ketika Anda menulis:

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

Sebagian besar pustaka logging segera membuat pesan menjadi string. Serilog dapat melakukan itu juga, tetapi ia mempertahankan { Answer: 42 }properti tersebut sehingga nantinya, menggunakan salah satu dari sejumlah penyimpanan data NoSQL, Anda dapat dengan benar menanyakan peristiwa berdasarkan nilai Answer.

Kami dekat dengan 1.0 dan mendukung semua platform modern (.NET 4.5, Windows Store dan Windows Phone 8).

Nicholas Blumhardt
sumber
Tetapi pertanyaannya adalah: Apakah itu mendukung Mono? ;) Kelihatannya menjanjikan (dan saya suka logo benang dan jarum) tetapi tidak dapat menemukan informasi apakah mendukung Mono atau tidak.
ashokgelal
Pertanyaan bagus :) ... ya, kami memiliki pengguna di Mono - Saya tidak yakin apakah mereka menggunakan Serilog .NET 4.5 atau 4.0 build, tetapi jika Anda menemukan masalah, kami akan membantu.
Nicholas Blumhardt
Dukungan .NET 4,5 membuat saya, mengunduh dan mencoba solusi Anda sekarang
Fat Shogun
8

Saya NLog kedua juga karena ia bekerja dengan kode yang tidak dikelola juga. Saya kira itu bisa menjadi mungkin untuk menggunakan log4net dan log4cxx bersama-sama, tetapi NLog menangani kode yang dikelola dan tidak terkelola di luar kotak.

Saya juga melihat Common.Logging , fasad yang membuat abstraksi dari api logging, mendukung log4net, NLog dan Entreprise Library. Saya tidak berpikir saya akan menggunakannya, tetapi saya suka bagaimana mereka menggunakan lambdas untuk meningkatkan kinerja ketika penebangan dinonaktifkan (fitur yang dibagikan dengan NLog dan mungkin yang lain).

eddycharly
sumber
4

Anda mungkin juga mempertimbangkan Blok Pencatatan Perpustakaan Perusahaan Microsoft . Muncul dengan desainer yang bagus.

Rashack
sumber
3
Memungkinkan Anda untuk mengkonfigurasinya secara visual sebagai lawan dari kerajinan tangan XML. Tergantung selera Anda ...
Rashack
13
Gagasan menggunakan alat visual untuk hal semacam itu bukanlah hal yang baik.
Adam Dymitruk
4
Mungkin bukan hal yang baik, tetapi untuk konfigurasi visual EntLib diperlukan. Konfigurasi penulisan secara manual hampir tidak mungkin, terlalu rumit (Anda tahu, itu dari Microsoft).
Pavel Hodek
1
Bahkan jika seseorang tidak menyukai desainer visual, mengapa harus downvote! : o
nawfal
EntLib melakukan logging secara sinkron, pada dasarnya dapat menekan kinerja.
Michael Freidgeim
2

Saya pikir konsensus umum adalah bahwa nlog sedikit lebih mudah untuk dikonfigurasi dan digunakan. Keduanya cukup mampu.

tsimon
sumber
0

Berdasarkan pengalaman saya, SmartInspect mengalahkan NLog dan log4net.

Sangat mudah digunakan, dokumentasi sangat bagus, dan Anda dapat melihat dan memfilter pesan yang sebelumnya dicatat dengan penampil log interaktif mereka, yang merupakan keuntungan dunia nyata yang sangat besar.

Satu hal yang saya suka adalah tampilan tab data, seperti tab browser di Chrome. Setiap tab dapat memberikan tampilan log yang disaring berbeda.

Contango
sumber
11
Ini adalah produk berbayar. NLog & Log4Net gratis.
Zo Memiliki