Saya sedang dalam proses refactoring aplikasi web yang cukup besar. Salah satu masalah utama adalah penanganan kesalahan yang tidak konsisten dan saya mencoba untuk membuat strategi yang masuk akal. Saya telah membuat penangan kesalahan khusus, melalui set_error_handler yang pada dasarnya mengubah kesalahan PHP di ErrorExceptions dan kelas pengecualian basis kustom, yang secara langsung diwarisi dari Pengecualian .
Pada produksi saya menggunakan pengecualian umum catch-all, melalui set_exception_handler , dan saya akan menambahkan pengecualian logging * ke dalam campuran. Dilema saya adalah di mana harus melakukan logging yang sebenarnya, di kelas pengecualian dasar atau di catch-all.
Saya telah memikirkan beberapa alasan untuk mencatatnya di catch-all:
- Ada beberapa pengecualian dalam kode yang perlu dikonversi ke beberapa anak yang sesuai dari kelas pengecualian dasar. Sampai itu terjadi, tidak semua pengecualian akan dicatat.
- Entah bagaimana rasanya lebih alami untuk melakukannya di catch-all, kelas pengecualian dasar seharusnya tidak melakukan lebih dari itu. (Mungkin itu hal tanggung jawab prinsip tunggal, tapi itu bisa saja perasaan yang salah arah)
dan satu alasan untuk masuk ke kelas pengecualian dasar:
- Saat ini tangkapan-semua hanya digunakan pada produksi. Akan mudah untuk memperkenalkannya di lingkungan kami yang lain (pengembangan, pengujian) tetapi itu akan membutuhkan beberapa penyesuaian, karena kesalahan ditangani secara berbeda per lingkungan, seperti pada produksi mereka diterjemahkan ke 404/503 halaman kesalahan.
Apakah ada praktik yang dapat diterima di mana harus memasukkan pengecualian?
* Logging akan melibatkan penulisan ke file teks pada awalnya, dan mungkin berevolusi untuk mengirim surat untuk jenis pengecualian tertentu.
Beberapa klarifikasi, dipicu oleh jawaban @ unholysampler :
Saya menghadapi basis kode sloc 2 * 10 ^ 6, dengan banyak hal pihak ketiga yang tidak dapat saya kendalikan, dan beberapa kode saya memang memiliki kendali atas pengecualian pra-tanggal dalam PHP. Dan ada juga beberapa kode baru-baru ini jelek, kita pulih dari tekanan panjang yang panjang di mana kita benar-benar harus berhenti berpikir dan hanya meretas.
Kami secara aktif refactoring untuk mengatasi semua ketidakkonsistenan dan memperkenalkan pendekatan penanganan kesalahan yang masuk akal, tetapi itu akan memakan waktu. Saya lebih tertarik pada apa yang harus dilakukan sampai saya mencapai titik di mana kesalahan ditangani dengan tepat. Saya mungkin akan mengajukan pertanyaan lain tentang strategi pengecualian yang masuk akal di beberapa titik.
Motivasi utama di balik pencatatan adalah mendapatkan email di ponsel saya setiap kali terjadi sesuatu yang buruk pada produksi. Saya tidak peduli jika kesedihan data menjadi besar, jika mereka melakukannya saya akan memiliki pekerjaan cron menghapus yang lama setiap saat.