คุณควรเข้าสู่ระบบจากรหัสห้องสมุด?


38

ถ้าฉันพัฒนาห้องสมุด Java มันเป็นวิธีที่ดีในการออกคำสั่งบันทึกจากภายในรหัสของห้องสมุดหรือไม่

การมีการบันทึกภายในไลบรารีจะทำให้การดีบักและการแก้ไขปัญหาโปร่งใสขึ้น อย่างไรก็ตามในทางกลับกันฉันไม่ชอบทิ้งขยะไลบรารีของฉันด้วยคำสั่งการบันทึก มีความหมายของประสิทธิภาพที่จะต้องพิจารณาด้วยหรือไม่?


คำตอบ:


33

ใช่คุณควรจะ. การใช้ซุ้มการบันทึกเช่นSLF4Jช่วยให้คุณมีความยืดหยุ่นโดยไม่ทำให้ผู้ใช้ต้องกังวลกับกรอบการบันทึกเฉพาะ

ผู้เขียนส่วนประกอบและไลบรารีที่มีการกระจายอย่างกว้างขวางอาจใช้โค้ดกับอินเตอร์เฟส SLF4J เพื่อหลีกเลี่ยงการกำหนดเฟรมเวิร์กการบันทึกบนผู้ใช้ปลายทางของส่วนประกอบหรือไลบรารี ดังนั้นผู้ใช้ปลายทางอาจเลือกกรอบการบันทึกที่ต้องการในเวลาการปรับใช้โดยการแทรกการเชื่อม slf4j ที่สอดคล้องกันบน classpath ซึ่งอาจเปลี่ยนแปลงได้ในภายหลังโดยการแทนที่การโยงที่มีอยู่ด้วยอีกอันบนคลาสพา ธ และรีสตาร์ทแอปพลิเคชัน วิธีนี้ได้รับการพิสูจน์แล้วว่าง่ายและแข็งแกร่งมาก

นอกจากนี้หากผู้ใช้ของคุณไม่มีโถ SLF4J (จากคู่มือผู้ใช้ ):

ในฐานะของ SLF4J เวอร์ชัน 1.6.0 หากไม่พบการเชื่อมโยงบนคลาสพา ธ ดังนั้น slf4j-api จะเริ่มต้นที่การใช้งานที่ไม่ดำเนินการโดยยกเลิกการร้องขอบันทึกทั้งหมด

หากคุณกังวลเกี่ยวกับประสิทธิภาพของการบันทึกให้ตรวจสอบรายการคำถามที่พบบ่อย SLF4Jนี้ แนวคิดคือคุณจัดเตรียมพารามิเตอร์เพื่อบันทึกคำสั่งแทนการเพิ่มลงใน Inline String:

สองบรรทัดต่อไปนี้จะให้ผลลัพธ์ที่แน่นอนเหมือนกัน อย่างไรก็ตามรูปแบบที่สองจะมีประสิทธิภาพสูงกว่ารูปแบบแรกโดยปัจจัยอย่างน้อย 30 ในกรณีของคำสั่งการเข้าสู่ระบบที่ถูกปิดใช้งาน

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

SLF4J ยังเป็นส่วนควบคุมการบันทึกอีกหรือไม่

SLF4J มีแนวคิดคล้ายกันมากกับ JCL ด้วยเหตุนี้จึงสามารถคิดได้ว่าเป็นส่วนการทำไม้อีกอย่างหนึ่ง อย่างไรก็ตาม SLF4J นั้นง่ายกว่าในการออกแบบและมีความแข็งแกร่งกว่า สรุป SLF4J หลีกเลี่ยงปัญหาตัวโหลดคลาสที่ทำให้เกิดภัยพิบัติ [Jakarta Commons Logging]


มีไลบรารีโอเพ่นซอร์สที่ดีที่บันทึกภายในรหัสไลบรารีที่คุณสามารถชี้ไปได้หรือไม่? เพื่อให้เราสามารถดูว่ามันจะทำอย่างไร
user1870400

Spring Framework เป็นไลบรารี Java ที่รู้จักกันดี ในกรณีของพวกเขาพวกเขาเลือก JCL
Mike Partridge

17

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

เมื่อเร็ว ๆ นี้ฉันใช้Mybatisซึ่งเป็นเครื่องมือโอเพ่นซอร์ส ORM ฉันกำลังดีบักปัญหาที่แบบสอบถามที่ฉันคิดว่าควรถูกต้องแล้วไม่มีผลลัพธ์ มันเป็นข้อความค้นหาที่กำหนดพารามิเตอร์และเนื่องจาก Mybatis มีการบันทึกภายในรหัสห้องสมุดของฉันฉันจึงสามารถเปิดใช้งานและดูคิวรี่ที่แท้จริงที่กำลังทำงานอยู่ มันง่ายที่จะบอกว่าฉันสลับสองพารามิเตอร์ หากไม่เข้าสู่ห้องสมุดฉันไม่สามารถพบปัญหาได้เกือบจะเร็ว

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