Java Logging vs Log4J [ditutup]

134

Apakah masih layak untuk menambahkan perpustakaan log4j ke proyek Java 5 hanya untuk login katakanlah beberapa pengecualian pada file dengan beberapa pengaturan rollover yang bagus. Atau akankah fasilitas util.logging standar melakukan pekerjaan dengan baik?

Bagaimana menurut anda?

Okami
sumber
Lihat stackoverflow.com/a/13144054/603516 untuk berbagai masalah penguncian log4j 1.2.
Vadzim

Jawaban:

115

Saya akan mengatakan Anda mungkin baik-baik saja dengan util.logging untuk kebutuhan yang Anda jelaskan.

Untuk pohon keputusan yang bagus, lihat Log4j vs java.util.logging

Pertanyaan Satu: Apakah Anda mengantisipasi kebutuhan untuk penangan pintar yang memiliki Log4j bahwa JUL tidak memiliki, seperti SMTPHandler, NTEventLogHandler, atau FileHandlers yang sangat nyaman?

Pertanyaan Dua: Apakah Anda melihat diri Anda ingin sering beralih format output logging Anda? Apakah Anda memerlukan cara yang mudah dan fleksibel untuk melakukannya? Dengan kata lain, apakah Anda memerlukan PatternLayout Log4j?

Pertanyaan Tiga: Apakah Anda mengantisipasi kebutuhan yang pasti akan kemampuan untuk mengubah konfigurasi logging yang kompleks di aplikasi Anda, setelah mereka dikompilasi dan digunakan dalam lingkungan produksi? Apakah konfigurasi Anda terdengar seperti, "Pesan parah dari kelas ini dapat dikirim melalui email ke orang yang mendukung; pesan berat dari subset kelas bisa log ke syslog deamon di server kami; pesan peringatan dari subset kelas lain bisa masuk ke file di drive jaringan A; dan kemudian semua pesan dari mana saja bisa masuk ke file di drive jaringan B "? Dan apakah Anda melihat diri Anda mengutak-atiknya setiap beberapa hari?

Jika Anda dapat menjawab ya untuk semua pertanyaan di atas, buka dengan Log4j. Jika Anda menjawab tidak pasti untuk mereka semua, JUL akan lebih dari cukup dan itu sudah termasuk dalam SDK.

Yang mengatakan, hampir setiap proyek hari ini tampaknya berakhir termasuk log4j, jika hanya karena beberapa perpustakaan lain menggunakannya.

Matt Sheppard
sumber
1
Jawaban berdasarkan kuesioner yang bagus. Untuk masing-masing sendiri berdasarkan kebutuhan.
HopeKing
43

Saya sarankan Anda menggunakan Simple Logging Facade for Java (SLF4J). Ini mendukung berbagai penyedia yang memasukkan Log4J dan dapat digunakan sebagai pengganti untuk Apache Commons Logging.

Brian Matthews
sumber
6
Apa yang salah dengan Pembalakan Bersama?
Bart van Heukelom
5
@ Bart van Heukelom dan komentar upvoters - baca articles.qos.ch/thinkAgain.html
Stephen C
4
@Stephen C: Terima kasih atas informasinya, meskipun saya mengetahui itu beberapa waktu lalu dan sekarang menggunakan SLF4J kapan pun saya bisa. (Komentar saya adalah pertanyaan nyata, bukan komentar konservatif)
Bart van Heukelom
1
@Bart, Commons Logging menggunakan penemuan dinamis dari paket yang akan digunakan. Penggunaan SLF4J (atau dulu) membutuhkan kelas-kelas di backend untuk memuat sama sekali.
Thorbjørn Ravn Andersen
21

Log4j telah ada sejak lama, dan ini bekerja dengan sangat baik. Saya tidak memiliki studi ilmiah untuk mendukungnya, tetapi berdasarkan apa yang saya lihat di sejumlah besar klien, mudah saja kerangka logging yang saya lihat digunakan lebih dari yang lain. Sudah ada sejak lama, dan tidak digantikan oleh Kerangka Pembalakan Besar Berikutnya, yang mengatakan sesuatu.

Ini sangat sederhana untuk diatur, dan mudah untuk mempelajari dasar appenders (output). Ada beberapa host host yang tersedia, termasuk:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExileallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPApender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. Penulis Penulis

Ditambah lainnya. Tidak sulit untuk menulis append Anda sendiri. Selain itu ada banyak fleksibilitas di masing-masing appender yang memungkinkan Anda untuk mengontrol secara spesifik apa yang dihasilkan dalam log Anda.

Satu catatan, saya memiliki serangkaian masalah classloader ketika saya menggunakan log apache commons selain log4j. Itu hanya untuk satu aplikasi spesifik, tetapi saya merasa lebih mudah menggunakan log4j saja, daripada memiliki fleksibilitas yang ditawarkan ketika menggunakan lapisan abstraksi seperti commons logging.

Lihat artikel ini untuk lebih jelasnya :

Semoga berhasil!

Rydell
sumber
17

java.util.logging menawarkan paket logging komprehensif tanpa kelebihan bagasi yang disediakan beberapa lainnya ..

adam
sumber
5
Plus, ini disertakan secara default dan digunakan oleh Java itu sendiri (jadi Anda tetap akan memilikinya!)
Memiliki QUIT - Anony-Mousse
7

log4j adalah paket yang jauh lebih baik secara keseluruhan, dan tidak memiliki beberapa masalah yang java.util.logging mengandung. Saya akan kedua yang menggunakan log4j secara langsung lebih mudah daripada menggunakan commons logging.

Will Sargent
sumber
3
Bisakah Anda lebih spesifik tentang cegukan yang dimiliki java.util.logging?
alkber
Tentu, seperti overhead dalam mencatat metode yang disinkronkan: lihat github.com/playframework/playframework/issues/6958 dan bugs.openjdk.java.net/browse/JDK-8077846
Will Sargent
4

Saya sarankan menggunakan Apache Commmons Logging sebagai antarmuka logging Anda. Dengan begitu Anda memiliki fleksibilitas untuk beralih implementasi logging kapan saja Anda inginkan tanpa memerlukan perubahan kode apa pun di pihak Anda.

Edmund Tay
sumber
3

Saya akan menggunakan log4j. Kemungkinan dengan log4j sama sekali tidak usang!

srist
sumber