ฉันอยู่ระหว่างการเปลี่ยนโครงสร้างแอปพลิเคชันเว็บที่ค่อนข้างใหญ่ หนึ่งในปัญหาที่สำคัญคือการจัดการข้อผิดพลาดที่ไม่สอดคล้องกันและฉันกำลังพยายามหากลยุทธ์ที่เหมาะสม ฉันได้สร้างตัวจัดการข้อผิดพลาดที่กำหนดเองผ่านset_error_handlerซึ่งจะเปลี่ยนข้อผิดพลาดของ PHP ในErrorExceptionsและคลาสยกเว้นฐานที่กำหนดเองซึ่งสืบทอดจากExceptionโดยตรง
ในการผลิตฉันใช้ catch-all exception ทั่วไปผ่านset_exception_handlerและฉันกำลังจะเพิ่มการบันทึก exception *ให้กับ mix ขึ้นเขียงของฉันคือที่ที่จะทำการบันทึกที่แท้จริงในคลาสยกเว้นฐานหรือใน catch-all
ฉันคิดถึงเหตุผลสองสามข้อในการเข้าสู่ระบบทั้งหมด:
- มีข้อยกเว้นเล็กน้อยในโค้ดที่ต้องแปลงเป็นชายด์ที่เหมาะสมของคลาส exception พื้นฐาน จนกว่าสิ่งนั้นจะเกิดขึ้นจะไม่มีการบันทึกข้อยกเว้นทั้งหมด
- มันรู้สึกเป็นธรรมชาติมากขึ้นที่จะทำใน catch-all คลาสยกเว้นฐานไม่ควรทำมากกว่าแค่นั้น (อาจเป็นสิ่งที่หลักการความรับผิดชอบเดียว แต่มันอาจเป็นความรู้สึกที่เข้าใจผิด)
และเหตุผลหนึ่งในการเข้าสู่คลาสยกเว้นฐาน:
- ปัจจุบัน catch-all ใช้กับการผลิตเท่านั้น มันจะง่ายต่อการแนะนำในสภาพแวดล้อมอื่น ๆ ของเรา (การพัฒนาการทดสอบ) แต่ที่จะเรียกร้องให้มีการปรับเปลี่ยนเล็กน้อยเนื่องจากข้อผิดพลาดจะได้รับการจัดการแตกต่างกันไปตามสภาพแวดล้อมเช่นเดียวกับการผลิต
มีวิธีปฏิบัติที่ยอมรับได้สำหรับการบันทึกข้อยกเว้นหรือไม่
* การบันทึกจะเกี่ยวข้องกับการเขียนไปยังไฟล์ข้อความในตอนแรกและมันอาจพัฒนาไปสู่การส่งอีเมลสำหรับข้อยกเว้นบางประเภท
คำอธิบายบางอย่างได้รับแจ้งจากคำตอบของ @ unholysampler :
ฉันกำลังเผชิญกับโค้ดเบส sloc ขนาด 2 * 10 ^ 6 พร้อมสิ่งต่าง ๆ มากมายที่ฉันไม่สามารถควบคุมได้และโค้ดบางตัวฉันสามารถควบคุมข้อยกเว้นก่อนวันใน PHP ได้ และยังมีรหัสล่าสุดที่เส็งเคร็งเรากำลังฟื้นตัวจากความกดดันที่ยาวนานซึ่งเราต้องหยุดคิดและแฮ็ค
เรากำลังทำการปรับโครงสร้างใหม่เพื่อจัดการกับความไม่สอดคล้องกันทั้งหมดและนำเสนอแนวทางการจัดการข้อผิดพลาดที่สมเหตุสมผล แต่ต้องใช้เวลาพอสมควร ฉันสนใจที่จะทำมากกว่าที่ฉันจะไปถึงจุดที่จัดการข้อผิดพลาดได้อย่างเหมาะสม ฉันอาจจะถามคำถามอื่นเกี่ยวกับกลยุทธ์ข้อยกเว้นที่เหมาะสมในบางจุด
แรงจูงใจหลักที่อยู่เบื้องหลังการเข้าสู่ระบบคือการได้รับอีเมลในโทรศัพท์ของฉันทุกครั้งที่มีอะไรไม่ดีเกิดขึ้นกับการผลิต ฉันไม่สนใจว่าข้อมูลจะเพิ่มขึ้นอย่างมหาศาลหรือไม่หากพวกเขาทำฉันจะมีงาน cron ลบงานเก่าทุกคราว