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)
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)
Jawaban:
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.
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?)
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.
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.
Keputusan Anda harus didasarkan pada
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.
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.