Oldukça büyük bir web uygulamasını yeniden düzenleme sürecindeyim. En büyük sorunlardan biri tutarsız hata işleme ve ben mantıklı bir strateji bulmaya çalışıyorum. Ben aracılığıyla, özel bir hata işleyicisi oluşturduk set_error_handler esasen PHP hataları döndüğünü ErrorExceptions ve özel bir baz istisna sınıftan doğrudan devralır o özel durum .
Üretimde, set_exception_handler aracılığıyla genel bir istisna catch-all kullanıyorum ve karışıma istisna günlüğü * eklemek üzereyim . Benim açmazım, temel istisna sınıfında veya tümünü yakalamada gerçek günlüğe kaydetmenin nerede yapılacağı.
Hepsini yakalamak için birkaç neden düşündüm:
- Kodda, temel istisna sınıfının uygun bir alt öğesine dönüştürülmesi gereken birkaç istisna vardır. Bu gerçekleşene kadar, tüm istisnalar kaydedilmez.
- Her nasılsa onu yakalamada yapmak daha doğal geliyor, bir temel istisna sınıfı sadece bundan daha fazlasını yapmamalıdır. (Tek bir sorumluluk ilkesi olabilir, ama sadece yanlış yönlendirilmiş bir his olabilir)
ve temel istisna sınıfına giriş yapmanın bir nedeni:
- Şu anda her şeyi yakalama sadece üretimde kullanılmaktadır. Diğer ortamlarımızda (geliştirme, test etme) tanıtmak kolay olurdu, ancak üretimde 404/503 hata sayfalarına çevrildiklerinden, hatalar ortam başına farklı şekilde ele alındığından, birkaç ayar gerektirecektir.
İstisnaların nereye kaydedileceğine dair kabul edilebilir bir uygulama var mı?
* Günlüğe kaydetme ilk önce bir metin dosyasına yazmayı içerir ve belirli istisna türleri için posta göndermeye gelişebilir.
@ Unholysampler'ın cevabı tarafından yapılan bazı açıklamalar :
2 * 10 ^ 6 sloc kod temeli, ben üzerinde hiçbir kontrol var üçüncü parti şeyler bir sürü karşı karşıya ve bazı kod PHP ön tarihler istisnalar üzerinde kontrol var. Ve ayrıca son derece berbat bir kod var, neredeyse düşünmeyi bırakmak zorunda kaldığımız ve sadece hacklendiğimiz uzun bir yoğun baskı döneminden kurtuluyoruz.
Tüm tutarsızlıkları ele almak ve mantıklı bir hata işleme yaklaşımı sunmak için aktif olarak yeniden düzenleme yapıyoruz, ancak bu biraz zaman alacak. Hataların uygun şekilde ele alındığı noktaya gelene kadar ne yapacağımla daha fazla ilgileniyorum. Muhtemelen bir noktada mantıklı bir istisna stratejisi hakkında başka bir soru soracağım.
Günlüğe kaydetmenin arkasındaki ana motivasyon, üretimde kötü bir şey olduğunda telefonuma bir e-posta almaktır. Veri dökümlerinin çok büyük hale gelmesi umrumda değil, eğer yaparlarsa eskilerini silecek bir cron işim olacak.