Я переробляю досить великий веб-додаток. Одне з найважливіших питань - непослідовність поводження з помилками, і я намагаюся придумати розумну стратегію. Я створив спеціальний обробник помилок через set_error_handler, який по суті перетворює помилки PHP у ErrorExceptions та спеціальний базовий клас виключень, який безпосередньо успадковується від Exception .
У виробництві я використовую загальний загальний виняток через set_exception_handler , і я збираюся додати журнал виключень в суміш * . Моя дилема полягає в тому, де робити фактичну реєстрацію в базовому класі винятків або в уловці.
Я подумав про декілька причин, щоб записати це у загальний вигляд:
- У коді є досить мало винятків, які потрібно перетворити на якісь відповідні дочірні базові класи винятків. Поки це не відбудеться, не всі винятки будуть зареєстровані.
- Зрозуміло, що це природніше робити це у загальному випадку, базовий клас винятку не повинен робити більше, ніж бути лише цим. (Це може бути принцип єдиної відповідальності, але це може бути просто помилкове почуття)
і одна причина для входу в базовий клас виключень:
- В даний час улов використовується тільки на виробництві. Було б легко представити його в інших наших середовищах (розробка, тестування), але це вимагатиме декількох коригувань, оскільки помилки обробляються по-різному в середовищі, так як при виробництві вони переводяться на 404/503 сторінки помилок.
Чи є якась прийнятна практика щодо реєстрації винятків?
* Спочатку ведення журналу передбачає запис у текстовий файл спочатку, і це може перерости до надсилання електронної пошти для певних типів винятків.
Деякі пояснення, спонукувані @ unholysampler в відповідь :
Я зіткнувся з кодовою базою слоїв 2 * 10 ^ 6, з великою кількістю сторонніх речей, над якими я не маю ніякого контролю, а в деяких кодах я маю контроль над винятками перед датами у PHP. І є також недавній недавній код, ми відновлюємося від тривалого періоду напруженого тиску, коли нам практично довелося перестати думати і просто зламали.
Ми активно рефакторируємо, щоб вирішити всі невідповідності та запровадити розумний підхід до помилок, але це займе певний час. Мене більше цікавить, що робити до тих пір, поки я не дойду до того моменту, коли помилки справляються належним чином. Я, певно, в якийсь момент задам інше питання щодо стратегії розумного виключення.
Основна мотивація входу в систему - отримувати електронний лист на мій телефон, коли щось трапляється на виробництві. Мені не байдуже, чи накопичуються дані величезні, якщо вони будуть, то я час від часу маю роботу з видаленням старих.