저는 PHP 오류 로그를 자주 읽지만 직접 로그를 작성할 기회가 거의 없습니다. Wang Jian의 "Best Logging Practices"를 읽은 후에는 명확하고 구조화된 로그를 작성하는 것이 매우 필요하다는 것을 느꼈습니다.
로그를 작성하기 전에 우리는 스스로에게 질문합니다. 왜 때때로 맞춤형 로그를 기록해야 하는가? 시스템의 기본 로깅 방법을 사용하는 대신?
두 가지 이유가 있다고 생각합니다.
1. 간편한 관리를 위해 통일된 형태의 로그가 필요합니다
2. 쓸모없는 오류 로그가 많아 하드 디스크 공간을 차지하므로 의미 있는 로그만 기록하면 됩니다.
그럼 연습해 보세요.
1. php.ini를 엽니다.
2. 로깅을 켜고 변경합니다
log_errors = 꺼짐
이
으로 변경되었습니다.
log_errors = 켜짐
3. php.ini를 저장하고 웹 서버를 종료한 후 다시 시작하세요
4. 코드 시작 부분에 다음 코드를 추가하세요.
//오류 처리 기능
함수 myErrorHandler($errno, $errstr, $errfile, $errline)
{
$log_file = "./php_%s_log_".date("Ymd").".log";//로그 파일 저장 디렉터리 및 파일명 정의
$템플릿 = '';
스위치($errno) {
사례 E_USER_ERROR:
$template .= "사용자 ERROR 수준 오류, 복구해야 합니다. 오류 번호 [$errno] $errstr ";
$template .= "오류 위치 파일 $errfile, $errline 줄
";
$log_file = sprintf($log_file,'error');
종료(1);//시스템 종료
휴식;
사례 E_USER_WARNING:
$template .= "사용자 경고 수준 오류입니다. 오류 번호 [$errno] $errstr을 수정하는 것이 좋습니다.";
$template .= "오류 위치 파일 $errfile, $errline 줄
";
$log_file = sprintf($log_file,'경고');
휴식;
케이스 E_USER_NOTICE:
$template .= "사용자 알림 수준 오류, 시스템에 영향을 주지 않으며 수리할 필요가 없습니다. 오류 번호 [$errno] $errstr ";
$template .= "오류 위치 파일 $errfile, $errline 줄
";
$log_file = sprintf($log_file,'공지');
휴식;
기본값:
$template .= "알 수 없는 오류 유형: 오류 번호 [$errno] $errstr ";
$template .= "오류 위치 파일 $errfile, $errline 줄
";
$log_file = sprintf($log_file,'알 수 없음');
휴식;
}
File_put_contents($log_file,$template,FILE_APPEND);
true를 반환합니다.
}
$error_handler = set_error_handler("myErrorHandler");//사용자 정의 오류 로그 활성화
5. 이전 코드 뒤에 오류 코드를 작성해 보세요
에코 1/0;
정의한 경로 아래에 추가 로그 파일이 있는지 확인하세요. :)
참고: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING 및 set_error_handler() 함수가 호출되는 파일에서 생성된 대부분의 E_STRICT와 같은 오류 수준은 사용자 정의 함수로 처리할 수 없습니다.
하지만 오류 로깅 시스템(php.ini의 log_error = on)을 활성화하고 시스템 로그 파일(또한 error_log = php.ini의 경로 이름)을 지정하고 error_reporting을 활성화하면 위의 오류가 발생합니다. 정의한 파일에 시스템 오류 로그로 기록됩니다.
위 내용은 이 글에 설명된 내용의 전부입니다. PHP 사용자 정의 오류 로그에 대해 모두가 새롭게 이해할 수 있기를 바랍니다.