상당히 큰 웹 앱을 리팩토링하는 중입니다. 주요 문제 중 하나는 일관성없는 오류 처리이며 합리적인 전략을 세우려고합니다. 본질적으로 ErrorExceptions의 PHP 오류 와 Exception 에서 직접 상속되는 사용자 정의 기본 예외 클래스 를 설정 하는 set_error_handler 를 통해 사용자 정의 오류 처리기를 만들었습니다 .
프로덕션에서는 set_exception_handler 를 통해 일반 예외 catch-all을 사용하고 있으며 예외 로깅 * 을 믹스 에 추가 하려고합니다. 내 딜레마는 기본 예외 클래스 또는 포괄 전체에서 실제 로깅을 수행 할 위치입니다.
나는 그것을 모두에 기록 해야하는 두 가지 이유를 생각했습니다.
- 코드에는 기본 예외 클래스의 적절한 하위로 변환해야하는 예외가 많이 있습니다. 그 때까지 모든 예외가 기록되는 것은 아닙니다.
- 어쨌든 포괄에서 그것을하는 것이 더 자연 스럽습니다. 기본 예외 클래스는 그 이상을해서는 안됩니다. (단 하나의 책임 원칙 일 수도 있지만 오해의 소지가있을 수 있습니다)
기본 예외 클래스에 로그인해야하는 한 가지 이유는 다음과 같습니다.
- 현재 포괄은 생산에만 사용됩니다. 다른 환경 (개발, 테스트)에서는 쉽게 도입 할 수 있지만 프로덕션 환경에서는 오류가 404/503 오류 페이지로 변환되므로 환경에 따라 오류가 다르게 처리되므로 약간의 조정이 필요합니다.
예외를 기록 할 위치에 대한 적절한 관행이 있습니까?
* 로깅에는 처음에 텍스트 파일에 쓰는 것이 포함되며 특정 유형의 예외에 대한 메일 전송으로 발전 할 수 있습니다.
@unholysampler의 답변에 의해 프롬프트되는 몇 가지 설명 :
나는 통제 할 수없는 많은 타사 물건과 함께 2 * 10 ^ 6 슬로 코드베이스에 직면하고 있으며, 일부 코드는 PHP의 이전 예외를 제어합니다. 그리고 최근에는 엉뚱한 최근 코드가 있습니다. 우리는 생각을 멈추고 해킹 당했을 때의 오랜 압박으로부터 회복하고 있습니다.
모든 불일치를 해결하고 합리적인 오류 처리 방식을 도입하기 위해 적극적으로 리팩토링하고 있지만 시간이 좀 걸릴 것입니다. 오류가 적절하게 처리되는 시점에 도달 할 때까지 수행 할 작업에 더 관심이 있습니다. 나는 아마도 어느 시점에서 현명한 예외 전략에 대해 다른 질문을 할 것이다.
로깅의 주된 동기는 생산에 문제가 생길 때마다 휴대폰으로 이메일을받는 것입니다. 나는 데이터 덤프가 커지면 신경 쓰지 않습니다. 그렇다면 매번 오래된 덤프를 삭제하는 cron 작업을해야합니다.