Java Logging เทียบกับ Log4J [ปิด]


136

ยังคงคุ้มค่าที่จะเพิ่มไลบรารี log4j ลงในโปรเจ็กต์ Java 5 เพียงเพื่อเข้าสู่ระบบสมมติว่ามีข้อยกเว้นบางประการสำหรับไฟล์ที่มีการตั้งค่าโรลโอเวอร์ที่ดี หรือสิ่งอำนวยความสะดวก util.logging มาตรฐานจะทำงานได้เช่นกัน?

คุณคิดอย่างไร?


ดูstackoverflow.com/a/13144054/603516สำหรับปัญหาการล็อก log4j 1.2 จำนวนมากที่ต้องพิจารณา
Vadzim

คำตอบ:


116

ฉันว่าคุณคงสบายดีกับ util.logging สำหรับความต้องการที่คุณอธิบาย

สำหรับโครงสร้างการตัดสินใจที่ดีโปรดดูที่Log4j vs java.util.logging

คำถามที่หนึ่ง: คุณคาดว่าจะต้องการตัวจัดการที่ชาญฉลาดที่ Log4j มีที่ JUL ไม่มีเช่น SMTPHandler, NTEventLogHandler หรือ FileHandlers ที่สะดวกมาก ๆ หรือไม่?

คำถามที่สอง: คุณคิดว่าตัวเองต้องการเปลี่ยนรูปแบบของเอาต์พุตการบันทึกบ่อยๆหรือไม่? คุณต้องการวิธีที่ง่ายและยืดหยุ่นในการดำเนินการหรือไม่? กล่าวอีกนัยหนึ่งคุณต้องการ PatternLayout ของ Log4j หรือไม่?

คำถามที่สาม: คุณคาดการณ์ถึงความต้องการที่ชัดเจนสำหรับความสามารถในการเปลี่ยนแปลงการกำหนดค่าการบันทึกที่ซับซ้อนในแอปพลิเคชันของคุณหลังจากที่รวบรวมและปรับใช้ในสภาพแวดล้อมการผลิต การกำหนดค่าของคุณฟังดูเหมือน "ข้อความที่รุนแรงจากคลาสนี้ถูกส่งทางอีเมลไปยังผู้สนับสนุนข้อความที่รุนแรงจากกลุ่มย่อยของคลาสจะถูกบันทึกไปยัง syslog deamon บนเซิร์ฟเวอร์ของเราข้อความเตือนจากคลาสย่อยอื่นจะถูกบันทึก ไปยังไฟล์บนไดรฟ์เครือข่าย A และจากนั้นข้อความทั้งหมดจากทุกที่จะเข้าสู่ไฟล์บนไดรฟ์เครือข่าย B "? และคุณเห็นว่าตัวเองปรับแต่งทุกสองสามวันหรือไม่?

หากคุณสามารถตอบใช่สำหรับคำถามข้างต้นให้ไปที่ Log4j หากคุณตอบว่าไม่แน่นอนสำหรับทุกคน JUL จะเพียงพอและรวมอยู่ใน SDK แล้วอย่างสะดวก

ที่กล่าวว่าเกือบทุกโครงการในทุกวันนี้ดูเหมือนจะจบลงรวมถึง log4j หากเป็นเพียงเพราะห้องสมุดอื่นใช้


1
คำตอบตามแบบสอบถามที่ยอดเยี่ยม ตามความต้องการของแต่ละคนเอง
HopeKing

Log4j vs java.util.loggingลิงก์ไม่ทำงานอีกต่อไป
จี

1
ไชโย - เปลี่ยนเป็นเครื่องสำรอง
Matt Sheppard

43

ขอแนะนำให้คุณใช้Simple Logging Facade สำหรับ Java (SLF4J) สนับสนุนผู้ให้บริการที่แตกต่างกันซึ่งรวมถึง Log4J และสามารถใช้แทน Apache Commons Logging ได้


6
Commons Logging มีอะไรผิดปกติ
Bart van Heukelom

5
@Bart รถตู้ Heukelom และแสดงความคิดเห็น upvoters - อ่านarticles.qos.ch/thinkAgain.html
สตีเฟ่น C

4
@Stephen C: ขอบคุณสำหรับข้อมูลแม้ว่าฉันจะเรียนรู้มานานแล้วและตอนนี้กำลังใช้ SLF4J ทุกเมื่อที่ทำได้ (ความคิดเห็นของฉันเป็นคำถามที่แท้จริงไม่ใช่คำพูดเชิงอนุรักษ์นิยม)
Bart van Heukelom

1
@Bart, Commons Logging ใช้การค้นหาแบบไดนามิกของแพ็คเกจที่จะใช้ การใช้ SLF4J (หรือเคย) จำเป็นต้องให้คลาสในแบ็กเอนด์โหลดเลย
Thorbjørn Ravn Andersen

21

Log4j มีมานานแล้วและทำงานได้ดีมาก ฉันไม่มีการศึกษาทางวิทยาศาสตร์ที่จะสนับสนุน แต่จากสิ่งที่ฉันเห็นในลูกค้าจำนวนมากมันเป็นกรอบการบันทึกที่ฉันเห็นว่าใช้มากกว่าที่อื่น ๆ มีมานานแล้วและไม่ได้ถูกแทนที่ด้วย Next Big Logging Framework ซึ่งบอกอะไรบางอย่าง

การตั้งค่านั้นง่ายมากและง่ายต่อการเรียนรู้ภาคผนวกพื้นฐาน (เอาต์พุต) มีตัวผนวกโฮสต์ทั้งหมดที่พร้อมใช้งาน ได้แก่ :

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

บวกอื่น ๆ การเขียน appender ของคุณเองก็ไม่ใช่เรื่องยาก นอกจากนี้ยังมีความยืดหยุ่นอย่างมากในแต่ละภาคผนวกที่ช่วยให้คุณควบคุมเฉพาะสิ่งที่ส่งออกในบันทึกของคุณ

ทราบอย่างหนึ่งฉันมีปัญหา classloader หลายรายการเมื่อฉันใช้ apache commons บันทึกนอกเหนือจาก log4j มันเป็นเพียงแอปพลิเคชั่นเดียวเท่านั้น แต่ฉันพบว่าการใช้ log4j เพียงอย่างเดียวนั้นง่ายกว่าแทนที่จะมีความยืดหยุ่นที่เสนอเมื่อใช้เลเยอร์นามธรรมเช่นการบันทึกแบบคอมมอนส์

ดูบทความนี้สำหรับ รายละเอียดเพิ่มเติม :

โชคดี!


17

java.util.logging นำเสนอแพคเกจการบันทึกที่ครอบคลุมโดยไม่มีสัมภาระส่วนเกินที่บางส่วนมีให้ ..


5
นอกจากนี้ยังรวมไว้โดยค่าเริ่มต้นและใช้งานโดย Java (ดังนั้นคุณจะมีต่อไป!)
มี QUIT - Anony-Mousse

7

log4j เป็นแพ็คเกจที่ดีกว่าโดยรวมและไม่มีอาการสะอึกที่ java.util.logging มี ประการที่สองการใช้ log4j โดยตรงนั้นง่ายกว่าการใช้คอมมอนส์บันทึก


3
คุณสามารถระบุเพิ่มเติมเกี่ยวกับอาการสะอึกที่ java.util.logging ได้หรือไม่?
alkber

แน่นอนเช่นเดียวกับค่าใช้จ่ายในการบันทึกวิธีการซิงโครไนซ์: ดูที่github.com/playframework/playframework/issues/6958และbugs.openjdk.java.net/browse/JDK-8077846
Will Sargent

4

ขอแนะนำให้ใช้Apache Commmons Loggingเป็นอินเทอร์เฟซการบันทึกของคุณ ด้วยวิธีนี้คุณจะมีความยืดหยุ่นในการสลับการใช้งานการบันทึกได้ทุกเมื่อที่คุณต้องการโดยไม่ต้องมีการเปลี่ยนแปลงโค้ดใด ๆ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.