매일 PHP 개발에서 우리는 종종 프로그램에서 예외를 만듭니다. 문제를 신속하게 찾으려면 PHP는 예외 클래스의 매우 실용적인 방법 인 gettraceasstring ()을 제공합니다. 스택 추적 정보를 문자열 출력으로 형식화하여 개발자가 오류가 발생하는 위치와 통화 체인을 빠르게 이해할 수 있도록 도와줍니다.
예외가 잡히면 gettraceasstring ()을 직접 사용하여 스택 정보를 얻을 수 있습니다.
<code> try {// 예외를 시뮬레이션하여 새로운 예외를 던지십시오 ( "테스트 오류"); } catch (예외 $ e) {echo $ e-> gettraceasstring (); } </code>출력은 다음과 유사합니다.
#0 /var/www/html/test.php(3): throw new Exception('테스트 오류')
#1 {main}
이것은 이미 기본 정보를 제공하지만 실제 응용 프로그램에서는 더 많은 컨텍스트를보고, 현재 로그인 한 사용자, 요청 된 URL, 매개 변수 등과 같은 사용자 지정 필드를 추가하여 문제를 더 빨리 찾을 수 있습니다.
보다 자세한 오류 보고서를 생성하기 위해 오류 처리 기능을 캡슐화하고 GetTraceAsString () 의 정보를 다른 진단 정보와 통합 할 수 있습니다. 예를 들어:
<code> 함수 logexceptionDetailed (예외 $ e) {$ log = []; $ log [] = "시간 :". 날짜 ( 'ymd h : i : s'); $ log [] = "오류 메시지 :". $ e-> getMessage (); $ log [] = "파일 :". $ e-> getFile (). ". JSON_UNESCAPED_UNICODE); file_put_contents(__DIR__ . '/error.log', implode("\n", $log) . "\n\n", FILE_APPEND);
}
</코드>
프로그램에서 사용 :
<code> try {// 오류가있을 수있는 someriskyFunction ()이 여기에서 실행된다고 가정하십시오. } catch (예외 $ e) {logexceptionDetailed ($ e); Echo "시스템 오류가 발생했습니다. 나중에 다시 시도하십시오."; } </code>이런 식으로, 우리는 오류 컨텍스트를 기록하고 통화 스택을 그대로 유지하여 생산 환경에서도 문제를 더 잘 재현하고 분석 할 수 있습니다.
중요한 시스템에서 오류가 발생한 후 로그를 기록해야 할뿐만 아니라 개발자에게 실시간으로 알려야 할 수도 있습니다. 위의 LogExceptionDetailed 함수를 확장하거나 이메일을 보내거나 원격 인터페이스를 호출 할 수 있습니다 (예 : Enterprise WeChat, Dingtalk 또는 자체 알림 시스템).
<code> 함수 notifydevteam ($ message) {$ url = "https://api.m66.net/notify"; // 샘플 인터페이스 $ data = [ 'msg'=> $ message]; $opts = [
"http" => [
"method" => "POST",
"header" => "Content-Type: application/json",
"content" => json_encode($data)
]
];
file_get_contents($url, false, stream_context_create($opts));
}
</코드>
로깅 후 추가 :
<code> notifydevteam (implode ( "\ n", $ log)); </코드>getTraceAsString ()을 사용하면 예외의 통화 스택 정보를 얻을 수 있습니다. 이는 디버깅에 매우 도움이됩니다. 컨텍스트 정보, 사용자 정의 형식, 로깅 및 알림 메커니즘을 결합하면 완전한 오류보고 시스템을 구축 할 수 있습니다. 이것은 무언가 잘못 될 때 가능한 빨리 문제를 알 수있을뿐만 아니라 검사 효율을 크게 향상시킵니다. 모든 PHP 프로젝트에 추가 해야하는 기능입니다.