1. 소개
Laravel은 기본적으로 AppExceptionsHandler 클래스에서 예외를 트리거하고 사용자에게 응답을 반환하도록 구성했습니다. 이 튜토리얼에서는 이 클래스를 자세히 살펴보겠습니다.
또한 Laravel은 Monolog 로그 라이브러리를 통합하여 다양하고 강력한 로그 프로세서를 제공합니다. 기본적으로 Laravel은 단일 로그 파일 또는 시스템에 대한 로그 오류 메시지를 선택할 수 있습니다. 통나무.
2. 구성
오류 세부 정보 표시
구성 파일 config/app.php의 디버그 구성 항목은 브라우저에 표시되는 오류 세부 정보 수를 제어합니다. . 기본적으로 이 구성 항목은 .env 파일의 환경 변수 APP_DEBUG를 통해 설정됩니다.
로컬 개발의 경우 환경 변수 APP_DEBUG를 true로 설정해야 합니다. 프로덕션 환경에서는 이 값을 false로 설정해야 합니다. 프로덕션 환경에서 true로 설정하면 일부 민감한 구성 값이 최종 사용자에게 노출될 수 있습니다.
로그 저장
기본적으로 Laravel은 단일, 일일, syslog 및 errorlog 로그 방법을 지원합니다. 단일 파일을 생성하지 않고 매일 로그 파일을 생성하려면 구성 파일 config/app.php에서 로그 값을 다음과 같이 설정해야 합니다.
'log' => 'daily '
로그 파일의 최대 수명 주기
일일 로그 모드를 사용할 때 Laravel은 기본적으로 최근 5일까지의 로그를 유지합니다. 시간이 지나면 앱 구성 파일에 log_max_files 구성을 추가해야 합니다. 파일:
'log_max_files' => 30
로그 오류 수준
Monlog를 사용할 때 로그 메시지에는 다양한 오류 수준이 있을 수 있습니다. 기본적으로 Laravel은 모든 로그를 저장소 디렉터리에 기록하지만, 프로덕션 환경에서는 구성 파일 app에 log_level 구성 항목을 추가하여 최소 오류 수준을 구성할 수 있습니다. .php.
이 구성 항목이 구성된 후 Laravel은 지정된 수준보다 크거나 같은 오류 수준의 모든 로그를 기록합니다. 예를 들어 기본 log_level이 error인 경우 오류, 심각, 경고 및 긴급 수준입니다. 로그 정보가 기록됩니다:
'log_level' => env('APP_LOG_LEVEL', 'error'),
참고: Monolog는 디버그, 정보, 공지, 경고, 오류, 중요, 경보, 긴급.
맞춤형 Monolog 구성
애플리케이션에서 Monolog 구성을 완전히 제어하려면configureMonologUsing 메소드를 사용할 수 있습니다. bootstrap/app.php 파일이 $app 변수를 반환하기 전에 이 메소드를 호출해야 합니다:
$app->configureMonologUsing(function($monolog) { $monolog->pushHandler(...); }); return $app;
3. 예외 처리기
모든 예외는 보고 및 렌더링이라는 두 가지 메서드가 포함된 AppExceptionsHandler 클래스에 의해 처리됩니다. 아래에서는 이 두 가지 방법에 대해 자세히 설명합니다.
보고 방법
보고 방법은 예외를 기록하고 이를 Bugsnag 또는 Sentry와 같은 외부 서비스로 보내는 데 사용됩니다. 기본적으로 보고 방법은 예외를 기본 클래스에 전달합니다. 물론 예외를 기록하고 필요에 따라 처리할 수도 있습니다.
예를 들어, 다양한 유형의 예외를 다르게 보고해야 하는 경우 PHP의 인스턴스 비교 연산자를 사용할 수 있습니다.
/** * 报告或记录异常 * * This is a great spot to send exceptions to Sentry, Bugsnag, etc. * * @param \Exception $e * @return void */ public function report(Exception $e){ if ($e instanceof CustomException) { // } return parent::report($e); }
무시 유형별 예외
예외 처리기의 $dontReport 속성에는 기록되지 않는 예외 유형의 배열이 포함되어 있습니다. 기본적으로 404 오류 예외는 로그 파일에 기록되지 않습니다. 필요한 경우 다른 예외를 추가할 수 있습니다. . 이 배열에 대한 예외 유형:
/** * A list of the exception types that should not be reported. * * @var array */ protected $dontReport = [ \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, \Illuminate\Validation\ValidationException::class, ];
렌더링 메소드
렌더링 메소드는 주어진 예외를 HTTP로 변환하여 브라우저 응답은 기본적으로 응답을 생성하는 기본 클래스에 예외가 전달됩니다. 물론 필요에 따라 예외 유형을 확인하거나 사용자 정의 응답을 반환할 수도 있습니다.
/** * 将异常渲染到HTTP响应中 * * @param \Illuminate\Http\Request $request * @param \Exception $e * @return \Illuminate\Http\Response */ public function render($request, Exception $e){ if ($e instanceof CustomException) { return response()->view('errors.custom', [], 500); } return parent::render($request, $e); }
4. 🎜>
일부 예외는 서버의 HTTP 오류 코드를 설명합니다. 예를 들어 "페이지를 찾을 수 없음" 오류(404), "인증 실패 오류"(401) 또는 프로그램 오류로 인한 500 오류가 있을 수 있습니다. 애플리케이션에서 이를 사용하려면 다음과 같은 중단 메서드를 사용할 수 있습니다.
abort(404);
중단 메서드는 즉시 다음과 같은 예외를 발생시킵니다. 또한 다음과 같은 응답 설명을 제공할 수 있습니다.
abort(403, 'Unauthorized action.');
이 메서드는 다음과 같습니다. 요청 수명 주기의 어느 시점에서나 사용됩니다.
사용자 정의 HTTP 오류 페이지
Laravel에서는 다양한 HTTP 상태 코드로 오류 페이지를 반환하는 것이 간단합니다. 예를 들어 404 오류 페이지를 사용자 정의하려면 리소스/뷰를 생성하세요. /errors/404.blade.php 파일에서 이 보기 파일은 프로그램이 반환한 모든 404 오류를 렌더링하는 데 사용됩니다. 이 디렉토리의 뷰 이름은 해당 HTTP 상태 코드와 일치해야 합니다.
5. 로그
Laravel은 강력한 Monolog 라이브러리를 기반으로 간단한 로그 추상화 계층을 제공합니다. 기본적으로 Laravel은 스토리지/로그에 애플리케이션에 대한 일일 로그를 생성하도록 구성되어 있습니다. 디렉터리에 있는 경우 Log 파사드를 사용하여 로그 정보를 로그에 기록할 수 있습니다.
<?php namespace App\Http\Controllers; use Log; use App\User; use App\Http\Controllers\Controller; class UserController extends Controller{ /** * 显示指定用户的属性 * * @param int $id * @return Response */ public function showProfile($id) { Log::info('Showing user profile for user: '.$id); return view('user.profile', ['user' => User::findOrFail($id)]); } }
로거는 RFC 5424에 정의된 긴급, 경고, 심각, 오류, 경고, 알림, 정보 및 디버그의 8가지 로그 수준을 제공합니다.
로그::emergency($error);
로그::alert($error);
로그::위기($error);
로그::error($error) ;
로그::warning($error);
로그::notice($error);
로그::info($error);
로그::debug($error);
컨텍스트 정보
컨텍스트 데이터도 배열 형식으로 로그 메소드에 전달된 다음 로그 메시지와 함께 형식화되어 표시됩니다.
Log::info( 'User failed to login.', ['id' => $user->id]);
기본 Monolog 인스턴스에 액세스
Monolog 사용 가능한 로그 프로세서가 여러 개 있으며, 필요한 경우 Laravel에서 사용하는 기본 Monolog 인스턴스에 액세스할 수 있습니다:
$monolog = Log::getMonolog();
추가 Laravel 5.3 연구 노트 오류 및 로그 관련 기사는 PHP 중국어 홈페이지를 주목해주세요!