Saya tidak dapat memutuskan apakah akan menggunakan slf4j atau tidak dengan log4j2. Berdasarkan posting online, sepertinya itu tidak akan memiliki kinerja apa pun tetapi apakah itu benar-benar diperlukan.
Juga poin-poin ini mendukung log4j2:
- SLF4J memaksa aplikasi Anda untuk mencatat String. API Log4j 2 mendukung pencatatan CharSequence apa pun jika Anda ingin membuat log teks, tetapi juga mendukung pencatatan Objek apa adanya.
- Log4j 2 API menawarkan dukungan untuk mencatat objek Pesan, ekspresi lambda Java 8, dan logging bebas sampah (ini menghindari pembuatan larik vararg dan menghindari pembuatan Strings saat membuat log objek CharSequence).
slf4j
dan logback (atau log4jv1)? Haruskah saya kemudian dipaksa untuk menginstal pencatat ketiga untuk menggunakan aplikasi Anda? Atau mungkin keamanan perusahaan memutuskan Anda hanya boleh menggunakanjava.util.logging
dalam produksi, lalu bagaimana?Jawaban:
Lanjutkan: program ke API log4j2, bukan slf4j
Aman: Log4j2 API menawarkan jaminan yang sama persis dengan slf4j - dan banyak lagi.
Sekarang Log4j2 itu sendiri dipisahkan menjadi API dan modul implementasi, tidak ada lagi nilai dalam menggunakan SLF4J.
Ya, merupakan praktik teknik yang baik untuk tetap membuka opsi Anda. Anda mungkin ingin mengubah ke implementasi logging lain nanti.
Selama 10 tahun terakhir ini, membangun fleksibilitas seperti itu dalam aplikasi Anda berarti menggunakan API pembungkus seperti SLF4J. Fleksibilitas ini tidak datang secara gratis: kelemahan dari pendekatan ini adalah aplikasi Anda tidak dapat menggunakan kumpulan fitur yang lebih kaya dari perpustakaan logging yang mendasarinya.
Log4j2 menawarkan solusi yang tidak mengharuskan aplikasi Anda dibatasi pada penyebut umum terendah.
Katup pelepasan: log4j-to-slf4j
Log4j2 menyertakan
log4j-to-slf4j
modul jembatan. Aplikasi apa pun yang dikodekan dengan Log4j2 API dapat memilih untuk mengalihkan implementasi pencadangan ke implementasi yang sesuai dengan slf4j kapan saja.Seperti yang disebutkan dalam pertanyaan, menggunakan API Log4j2 secara langsung menawarkan lebih banyak fungsionalitas dan memiliki beberapa keuntungan non-fungsional dibandingkan menggunakan API pembungkus seperti slf4j:
(Lihat 10 fitur API Log4j2 tidak tersedia di SLF4J untuk lebih jelasnya.)
Aplikasi dapat dengan aman menggunakan fitur-fitur kaya Log4j2 API ini tanpa terkunci pada implementasi inti Log4j2 asli.
SLF4J masih merupakan katup pengaman Anda, itu tidak berarti aplikasi Anda harus mengkodekan API SLF4J lagi.
Pengungkapan: Saya berkontribusi ke Log4j2.
Pembaruan: Tampaknya ada beberapa kebingungan bahwa pemrograman ke API Log4j2 entah bagaimana memperkenalkan "fasad untuk fasad". Tidak ada perbedaan dalam hal ini antara API Log4j2 dan SLF4J.
Kedua API tersebut memerlukan 2 dependensi saat menggunakan implementasi native, dan 4 dependensi untuk implementasi non-native. SLF4J dan Log4j2 API identik dalam hal ini. Sebagai contoh:
sumber
log4j-to-slf4j
dependensi alih-alihlog4j-core
dan memilih salah satu implementasi SLF4J yang Anda sebutkan ini. Jumlah implementasi asli API Log4j2 tidak relevan.