에러 핸들링 Error Handling¶
CodeIgniter 는 아래 함수들을 이용하여 여러분 프로그램에서 에러에 대한 리포트를 생성하도록 지원합니다.게다가,에러 로깅(error logging )클래스도 제공합니다. 에러로깅 클래스를 이용하면 에러를 텍스트 파일로 저장할 수 있습니다.
Note
기본적으로 CodeIgniter 는 모든 PHP 에러를 보여줍니다. 그런데 당신의 프로그램 개발이 완료되었을 때 이런 기본 설정을 변경하고 싶을 수 있습니다. 메인 index.php 의 맨윗쪽에 error_reporting() 함수가 있습니다. error reporting 을 disable 하는 것이 에러 로그파일을 기록하는 것 까지 disable 하지는 않습니다.
대부분 CodeIgniter의 시스템과는 달리, 에러 함수는 절차적 인터페이스를 가지며 프로그램 전반에 걸쳐 글로벌하게 사용할 수 있습니다. 이런 접근방법은 클래스나 함수의 스코프에 상관 없이 에러 메시지를 생성하게 해줍니다. 다음 함수는 에러를 생성하도록 해줍니다.
CodeIgniter 는 또한 exit()를 호출할 때마다 상태 코드를 리턴합니다. 이 종료 상태 코드는 HTTP 상태 코드와는 별개이며, 어떠한 문제가 발생하였는지, 스크립트가 성공적으로 실행완료되었는지 지켜보므로, 다른 프로세스에게 통지하는 기능을 합니다. 이 값은 application/config/constants.php에 정의되어 있습니다. 종료 상태 코드는 적절한 코드를 반환, CLI 설정에서 가장 유용하지만 서버 소프트웨어는 스크립트의 트랙과 응용 프로그램의 상태를 유지하는 데 도움이됩니다.
다음 함수는 에러를 생성하도록 도와줍니다:
- show_error($message, $status_code, $heading = 'An Error Was Encountered')¶
인수: - $message (mixed) – Error message
- $status_code (int) – HTTP Response status code
- $heading (string) – Error page heading
반환형: void
이 함수는 아래 템플릿을 이용하여 에러 메세지를 표시합니다:
application/views/errors/html/error_general.php
또는:
application/views/errors/cli/error_general.php선택적 파라미터 $status_code 는 어떤 HTTP 상태코드로 에러와 함께 보내질지 결정합니다. 만약 $status_code 이 100 보다 작다면,, HTTP 상태코드는 500 이 될 것입니다, 그리고 종료 상태 코드 $status_code + EXIT__AUTO_MIN 로 설정됩니다. 만약 그 값이 EXIT__AUTO_MAX 보다 크면, 또는 만약 $status_code 이 100 이거나 그보다 크면, 종료 상태코드는 EXIT_ERROR 가 될 것입니다. application/config/constants.php 파일에서 더 자세한 내용을 확인하실 수 있습니다.
- show_404($page = '', $log_error = TRUE)¶
인수: - $page (string) – URI string
- $log_error (bool) – Whether to log the error
반환형: void
이 함수는 아래 템플릿을 이용하여 404 에러 메세지를 표시합니다:
application/views/errors/html/error_404.php
또는:
application/views/errors/cli/error_404.php이 함수는 발견되지않은(not found) 페이지의 경로를 문자열로 전달받을것을 가정합니다. 종료 상태코드는 EXIT_UNKNOWN_FILE로 세팅됩니다. CodeIgniter 는 컨트롤러를 발견할 수 없으면 자동적으로 404 에러 메세지를 표시합니다.
모든 show_404() 호출은 로그에 기록됩니다. 두 번째 파라미터를 FALSE 로 하면 로그에 기록하지 않습니다.
- log_message($level, $message, $php_error = FALSE)¶
인수: - $level (string) – Log level: ‘error’, ‘debug’ or ‘info’
- $message (string) – Message to log
- $php_error (bool) – Whether we’re logging a native PHP error message
반환형: void
이 함수는 로그파일에 에러 메세지를 쓸 수 있도록 합니다. 먼저 3개의 에러타입(debug, error, info)중 하나의 타입을 첫 번째 파라미터로 전달해야 합니다.메세지는 두 번째 파라미터로 전달합니다.
예제:
if ($some_var == '') { log_message('error', 'Some variable did not contain a value.'); } else { log_message('debug', 'Some variable was correctly set'); } log_message('info', 'The purpose of some variable is to provide some value.');
3가지 메세지 타입이 있습니다:
- Error 메세지 : PHP 에러나 사용자 에러등 진짜 에러 메시지.
- Debug 메세지: 디버그를 도와주는 메세지. 예를 들어, 클래스가 초기화되면 당신은 debugging 정보로 파일에 기록할 수 있습니다.
- Informational 메세지 : 이 메시지는 가장 우선순위가 낮은 메세지 . 단순히 어떤 프로세스에 대한 메세지를 제공합니다.
Note
로그파일을 기록하려면 logs/ 폴더에 쓰기권한이 있어야 합니다.또한, application/config/config.php 에서 쓰레스홀드(threshold)를 먼저 세팅해야 합니다. 예를 들어, 에러 메세지만 기록하고 싶을수도 있겠죠 ?. 제로로 세팅하시면 로깅은 비활성화(disabled) 될것입니다.