【Laravel】 디폴트로 출력되지 않는 예외(HTTP 에러 등)를 로그에 출력한다

6852 단어 PHP로그라라벨

결론


App\Exceptions\Handler.php 에서 $internalDontReport 배열을 빈 배열 []로 재정의합니다.

설명



Laravel의 예외는 모두 vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler 클래스로 catch 되어 로그의 출력과 유저에게의 표시를 실시합니다.

로그의 출력은 report 메소드가 담당하고 있습니다.
    public function report(Exception $e)
    {
        if ($this->shouldntReport($e)) {
            return;
        }

        if (Reflector::isCallable($reportCallable = [$e, 'report'])) {
            if (($response = $this->container->call($reportCallable)) !== false) {
                return $response;
            }
        }

        try {
            $logger = $this->container->make(LoggerInterface::class);
        } catch (Exception $ex) {
            throw $e;
        }

        $logger->error(
            $e->getMessage(),
            array_merge(
                $this->exceptionContext($e),
                $this->context(),
                ['exception' => $e]
            )
        );
    }

catch한 모든 예외를 로그에 토해내게 되어 있습니다만, Handler 클래스에서는 「이 예외의 로그는 토출하지 않아도 된다」라고 하는 지정을 할 수 있습니다. 그것을 지정하는 것이 $internalDontReport 배열로, 디폴트에서는 이하가 지정되어 있습니다.
    /**
     * A list of the internal exception types that should not be reported.
     *
     * @var array
     */
    protected $internalDontReport = [
        AuthenticationException::class,         // 認証関連の例外
        AuthorizationException::class,          // 認可関連の例外
        HttpException::class,                   // HTTPリクエスト関連の例外
        HttpResponseException::class,           // HTTPレスポンス関連の例外
        ModelNotFoundException::class,          // モデルが見つからない例外
        SuspiciousOperationException::class,    // ユーザーがセキュリティの観点から疑わしいとみなされる操作を実行した場合に発生
        TokenMismatchException::class,          // 送信されたトークンとDBのトークンが一致しない例外
        ValidationException::class,             // バリデーション
    ];
Handler 클래스는 vendor 부하 뿐만이 아니라, 어플리케이션 작성시에 App\Exceptions\Handler.php 에도 상속한 클래스가 작성되고 있습니다. 여기에 처리를 기술하는 것으로 vendor 부하의 프로퍼티 메소드를 오버라이드(override) 할 수가 있습니다.
App\Exceptions\Handler.php$internalDontReport
    // App\Exceptions\Handler.phpに以下を追記すれば、すべての例外がログに出力される
    protected $internalDontReport = [
        // AuthenticationException::class,
        // AuthorizationException::class,
        // HttpException::class,
        // HttpResponseException::class,
        // ModelNotFoundException::class,
        // SuspiciousOperationException::class,
        // TokenMismatchException::class,
        // ValidationException::class,
    ];

참고:
h tps : // 레아도 bぇ. 이 m/ぁらゔぇl/7. x/그럼/에로 rs. HTML

좋은 웹페이지 즐겨찾기