รูปแบบการออกแบบใดที่เหมาะสมกว่าสำหรับการบันทึก


10

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

MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99));

ฉันทำผิดพลาดในการใช้รูปแบบการออกแบบของ Observer หรือไม่ ฉันต้องการรูปแบบการออกแบบอื่นหรือไม่ หรือฉันควรหยุดคิดเกี่ยวกับรูปแบบการออกแบบ?

PS1 หากฉันต้องการเข้าสู่ระบบโดยใช้ผู้ฟังและผู้สังเกตการณ์เท่านั้นฉันจะต้องเพิ่มและปรับปรุงผู้สังเกตการณ์และผู้ฟังของโปรแกรมอย่างแน่นอน

PS2 แน่นอนฉันรู้ว่ามีห้องสมุดที่แตกต่างกันสำหรับการเข้าสู่ระบบใน Java และฉันใช้ java.utils.logging แต่ฉันต้องมี wrapper เพื่อเข้าสู่ระบบวัตถุพิเศษของฉัน


2
Java มีกรอบการบันทึก 17 รายการและกรอบการบันทึก meta (slf4j) และเฟรมเวิร์กการบันทึก meta-meta- บางส่วนและอาจไม่มีกรอบการทำงานสำหรับคุณหรือไม่
kevin cline

คำตอบ:


15

Loggingมักจะถูกนำมาใช้กับห่วงโซ่ของรูปแบบความรับผิดชอบ แน่นอนคุณสามารถ (และฉันจะ) รวมที่มีซุ้ม ฉันจะไม่ใช้ผู้ฟังหรือผู้สังเกตการณ์ด้วยตัวเอง

ห่วงโซ่ความรับผิดชอบ - คนตัดไม้


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

8

ใช้การเขียนโปรแกรมเชิงมุมมองซึ่งใช้คำแนะนำหลังจากก่อนและรอบ ๆ มากกว่าวิธีการ ที่นั่นตามที่คุณต้องการคุณสามารถเพิ่มบันทึกก่อนเริ่ม API หลังจากหรือตามเงื่อนไขบางอย่างและยังแยกรหัสหลักของคุณจากรหัสบันทึก


0

ผู้สังเกตการณ์ฟังดูไม่เหมาะกับฉัน นอกจากนี้การโยนคนตัดไม้เรียก "ทุกที่ที่คุณต้องการ" จะแตกรหัสของคุณและละเมิด SRP

ตัวอย่างเช่นคุณอาจสนใจใน AOP เพื่อให้คุณสามารถแนบการโทรบันทึกโดยใช้คำอธิบายประกอบวิธี


0

โซ่แห่งความรับผิดชอบดูเหมือนจะเป็นรูปแบบที่ดีเมื่อผลผลิตของคุณสามารถลงจอดได้หลายแห่ง ใน UML คุณมีตัวบันทึกที่แตกต่างกันหนึ่งตัวซึ่งนำไปสู่คอนโซลอื่น ๆ ไปที่ errorFile และอันดับที่ 3 เพียงแค่ตัวบันทึกข้อมูล

ฉันมักจะเห็นว่า logLevels แตกต่างกัน แต่ไฟล์บันทึกเหมือนกัน

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

วิธีนี้ฉันเห็นว่าเราสามารถแยกรหัสการบันทึกของเราจากรหัสแอปพลิเคชัน

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