log4j vs logback [ditutup]

152

Kami menggunakan log4j di belakang pembungkus buatan sendiri. Kami berencana untuk menggunakan lebih banyak fitur sekarang.

Haruskah kita memperbarui ke logback?

(Maksud saya kerangka bukan fasad seperti SLF4J)

Jonik
sumber
1
logback terdengar sangat mirip dengan login jakarta umum - apa perbedaan utama?
matt b
12
SLF4J (yang merupakan fasad) terdengar mirip dengan commons.logging. Perbedaan utama adalah bahwa SLF4J menggunakan pengikatan statis sementara commons.logging menggunakan beberapa strategi resolusi. Logback ("asli" (yaitu tidak ada lapisan pembungkus tambahan) implementasi fasad) dapat dibandingkan dengan LOG4J tetapi memiliki API yang lebih kaya.
Huxi

Jawaban:

190

Logback secara alami mengimplementasikan API SLF4J. Ini berarti bahwa jika Anda menggunakan logback, Anda sebenarnya menggunakan API SLF4J. Anda secara teoritis dapat menggunakan internal API logback secara langsung untuk masuk, tetapi itu sangat tidak disarankan. Semua dokumentasi dan contoh logback pada penebang ditulis dalam istilah API SLF4J.

Jadi dengan menggunakan logback, Anda akan benar-benar menggunakan SLF4J dan jika karena alasan apa pun Anda ingin beralih kembali ke log4j, Anda dapat melakukannya dalam beberapa menit hanya dengan menjatuhkan slf4j-log4j12.jar ke jalur kelas Anda.

Ketika bermigrasi dari logback ke log4j, logback bagian-bagian tertentu, khususnya yang terkandung dalam file konfigurasi logback.xml masih perlu dimigrasi ke setara log4j, yaitu properti log4j.properti . Ketika bermigrasi ke arah lain, konfigurasi log4j, yaitu log4j.properties , perlu dikonversi ke padanan logback-nya. Ada alat online untuk itu. Jumlah pekerjaan yang terlibat dalam memigrasi file konfigurasi jauh lebih sedikit daripada pekerjaan yang diperlukan untuk memigrasi panggilan logger yang disebarluaskan ke seluruh kode sumber perangkat lunak Anda dan ketergantungannya.

Ceki
sumber
28
Ini adalah kesempatan untuk berbicara dengan pengembang perangkat lunak yang sangat populer. Terima kasih Ceki untuk log4j.
Srujan Kumar Gulla
7
Penafian: Orang ini adalah pengembang asli dari semua Log4j, SLF4J dan Logback. Tapi jangan bekerja lagi untuk Log4j.
Victor Stafusa
56

Seharusnya kamu? Ya .

Mengapa? Log4J pada dasarnya telah ditinggalkan oleh Logback .

Apa ini mendesak? Mungkin tidak.

Apakah tidak menyakitkan? Mungkin, tetapi itu mungkin tergantung pada laporan logging Anda.

Perhatikan bahwa jika Anda benar-benar ingin memanfaatkan sepenuhnya LogBack (atau SLF4J), maka Anda benar-benar perlu menulis pernyataan logging yang benar . Ini akan menghasilkan keuntungan seperti kode yang lebih cepat karena evaluasi yang malas, dan lebih sedikit baris kode karena Anda dapat menghindari penjaga.

Akhirnya, saya sangat merekomendasikan SLF4J. (Mengapa membuat ulang roda dengan fasad Anda sendiri?)

AWhitford
sumber
48
Catatan: Proyek log4j tidak menganggap log4j usang.
Thorbjørn Ravn Andersen
17
Terminologi harus diklarifikasi; tegas, penulis proyek log4j menganggap logback menjadi penerus log4j. Ini adalah penulis yang sama dari kedua proyek, jadi pendapatnya harus cukup berpengaruh; "proyek log4j" sendiri tidak benar-benar "mempertimbangkan" apa pun. Kelompok orang-orang saat ini yang terkait dengan log4j memiliki pendapat yang berbeda (beberapa benar-benar setuju, beberapa tidak mengejutkan tidak setuju). Dengan sedikit sejarah di belakang kami (3 tahun setelah komentar asli), SLF4J + Logback terus mendapatkan lebih dari Log4j.
michael
@michael_n Harap dicatat bahwa Log4j 1 TIDAK ditulis oleh satu orang. Itu salah untuk mengatakan "penulis yang sama". Ceki adalah penulis penting, tidak diragukan lagi, tetapi bukan satu-satunya. Bahkan banyak orang membantu membuat Log4j 1 apa adanya.
Christian
@Christian "TIDAK ditulis ..." tentu saja, itu harus diimplikasikan untuk setiap proyek apache dewasa (dan kualifikasi saya, "grup orang saat ini yang terkait dengan log4j"); Meskipun demikian, jika saya dapat mengedit komentar, saya akan mengatakan " aslinya ditulis", sebagaimana artikel wikipedia juga menyatakan. Re: "Sebenarnya banyak orang yang membantu membuat Log4j 1 apa adanya" , itu benar-benar benar, yaitu untuk lebih baik atau lebih buruk; dan juga, dalam beberapa hal kecil, berkontribusi pada dimulainya slf4j + logback :-)
michael
3
Jadi, apa untungnya bagi Anda semua untuk memperjuangkan perpustakaan logging ini atau itu? Mengapa kami mencoba membunuh / mempromosikan perpustakaan? Setidaknya berikan beberapa alasan rasional MENGAPA yang satu lebih baik daripada yang lain. Ya Tuhan, Stack Overflow berantakan.
Pengguna
48

Di dunia logging ada Fasad (seperti Apache Commons Logging, slf4j atau bahkan Log4j 2.0 API) dan implementasi (Log4j 1 + 2, java.util.logging, TinyLog, Logback).

Pada dasarnya Anda harus mengganti pembungkus buatan sendiri Anda dengan slf4j JIKA dan hanya JIKA Anda tidak senang dengan itu untuk beberapa alasan. Sementara Apache Commons Logging tidak benar-benar menyediakan API modern, slf4j dan fasad Log4j 2 baru menyediakan itu. Karena cukup banyak aplikasi menggunakan slf4j sebagai pembungkus, mungkin masuk akal untuk menggunakannya.

slf4j memberikan sejumlah gula API yang bagus, seperti contoh ini dari slf4j docs:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

Substitusi variabel. Ini juga didukung oleh Log4j 2.

Namun Anda perlu menyadari bahwa slf4j dikembangkan oleh QOS yang juga memelihara logback. Log4j 2.0 dipanggang di Yayasan Perangkat Lunak Apache. Dalam tiga tahun terakhir komunitas yang aktif dan aktif telah tumbuh di sana lagi. Jika Anda menghargai Open Source seperti yang dilakukan oleh Apache Software Foundation dengan semua jaminannya Anda mungkin mempertimbangkan kembali menggunakan slf4j untuk menggunakan Log4j 2 secara langsung.

Tolong dicatat:

Di masa lalu log4j 1 tidak dipelihara secara aktif saat Logback sedang. Tetapi hari ini segalanya berbeda. Log4j 2 dikelola secara aktif dan dirilis pada jadwal yang hampir teratur. Ini juga mencakup banyak fitur modern dan -imho- membuat beberapa hal lebih baik daripada Logback. Ini terkadang hanya masalah selera dan Anda harus menarik kesimpulan sendiri.

Saya menulis tinjauan singkat tentang Fitur baru Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html

Saat membaca Anda akan melihat bahwa Log4j 2 terinspirasi oleh Logback tetapi juga oleh kerangka kerja logging lainnya. Tetapi basis kode berbeda; itu hampir tidak berbagi apa pun dengan Log4j 1 dan nol dengan Logback. Ini mengarah ke beberapa perbaikan seperti misalnya Log4j 2 beroperasi dengan bytestreams, bukan Strings di bawah tenda. Juga tidak kehilangan acara saat mengkonfigurasi ulang.

Log4j 2 dapat masuk dengan kecepatan lebih tinggi daripada kerangka kerja lain yang saya tahu: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

Dan komunitas pengguna tampaknya masih jauh lebih besar daripada Logback: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

Itu semua mengatakan ide terbaik adalah Anda memilih kerangka kerja logging yang paling cocok dengan apa yang ingin Anda capai. Saya tidak akan mengganti kerangka penuh jika saya akan menonaktifkan logging di lingkungan produksi dan hanya melakukan logging dasar di aplikasi saya. Namun jika Anda melakukan sedikit lebih banyak dengan pencatatan, lihat saja fitur-fitur yang disediakan oleh kerangka kerja dan pengembangnya. Meskipun Anda mendapatkan dukungan komersial untuk Logback melalui QOS (saya dengar), saat ini tidak ada dukungan komersial untuk Log4j 2. Di sisi lain, jika Anda perlu melakukan audit logging dan memerlukan kinerja tinggi yang disediakan oleh append async, sangat masuk akal untuk periksa log4j 2.

Harap dicatat meskipun semua kenyamanan yang mereka berikan, fasad selalu makan sedikit kinerja. Ini mungkin tidak mempengaruhi Anda sama sekali, tetapi jika Anda memiliki sumber daya yang rendah Anda mungkin perlu menyimpan semua yang Anda miliki.

Tanpa mengetahui Anda persyaratan yang lebih baik hampir tidak mungkin untuk memberikan rekomendasi. Hanya: jangan beralih hanya karena banyak orang beralih. Beralih hanya karena Anda melihat nilai itu. Dan argumen bahwa log4j sudah mati tidak dihitung lagi. Itu hidup, dan panas.

PENOLAKAN: Saya saat ini VP, Layanan Logging Apache dan juga terlibat dalam log4j.

Kristen
sumber
19

Tidak benar-benar menjawab pertanyaan Anda, tetapi jika Anda bisa pindah dari pembungkus buatan sendiri maka ada Simple Logging Facade for Java (SLF4J) yang kini beralih ke Hibernate (bukan pencatatan bersama).

SLF4J tidak mengalami masalah dengan pemuat kelas atau kebocoran memori yang diamati dengan Jakarta Commons Logging (JCL).

SLF4J mendukung logging, log4j dan logback JDK. Maka itu seharusnya cukup mudah untuk beralih dari log4j ke logback ketika waktunya tepat.

Sunting: Aplogies yang belum saya jelaskan. Saya menyarankan menggunakan SLF4J untuk mengisolasi diri Anda dari keharusan membuat pilihan yang sulit antara log4j atau logback.

toolkit
sumber
3
Saya tahu SLF4J. Tapi saya meminta kerangka kerja logging bukan untuk fasad!
4
Permintaan maaf. Apa yang saya sarankan adalah bahwa jika Anda menggunakan SLF4J alih-alih fasad kustom Anda sendiri, maka beralih dari log4j ke logback akan kurang menyakitkan?
toolkit
Apa sumber kutipan itu? Commons logging adalah komponen yang telah dicoba dan diuji. Saya tidak pernah mengalami kebocoran memori dengannya.
Kshitiz Sharma
1
@KshitizSharma - dari tautan dokumentasi SLF4J yang saya berikan: slf4j.org/manual.html
toolkit
13

Keputusan Anda harus didasarkan pada

  • kebutuhan aktual Anda untuk "lebih banyak fitur" ini; dan
  • biaya yang Anda harapkan untuk mengimplementasikan perubahan.

Anda harus menahan keinginan untuk mengubah API hanya karena itu "lebih baru, lebih bersinar, lebih baik." Saya mengikuti kebijakan "jika tidak rusak, jangan tendang."

Jika aplikasi Anda membutuhkan kerangka kerja logging yang sangat canggih, Anda mungkin ingin mempertimbangkan alasannya.

Carl Smotricz
sumber
3

Proyek matang atau bahkan proyek jauh ke dalam tahap pengembangan mungkin akan kehilangan lebih dari keuntungan dari peningkatan tersebut, IMHO. Logback tentu saja jauh lebih maju dalam serangkaian poin, tetapi tidak sampai batas untuk penggantian lengkap dalam sistem kerja. Saya pasti akan mempertimbangkan logback untuk pengembangan baru, tetapi log4j yang ada cukup bagus dan matang untuk apa pun yang sudah dirilis dan bertemu pengguna akhir. Ini sangat subyektif, Anda harus melihat biaya sendiri.

Dima
sumber