[Flask] 에러와 로깅

[Flask] 에러와 로깅

에러(Error)

일반적으로 웹 브라우저에서 요청한 URL 에 대해 응답이 없으면 발생하는 404 에러가 발생합니다.

이처럼 http 오류 코드에 대해 플라스크에서는 브라우저의 에러코드 화면이 아니라, 사용자가 별도로 지정한 화면으로 처리할 수 있습니다.

우선 간단한 예제 코드부터 보도록 하겠습니다.

코드를 보고 천천히 읽어보면 apphandler 데코레이터를 통해 404 에러코드에 대해 별도처리를 하도록 한 뒤, page_not_found를 정의합니다. 여기서 리턴값은 사용자가 별도로 구성한 'page_not_found.html' 이라는 템플릿입니다.

@app.errorhandler(404) def page_not_found(error) return render_template('page_not_found.html'), 404

예제코드에서 일단 눈에 띄는 것은 errorhandler 라고 하는 데코레이터와 리턴값이 2개라는 점입니다.

파이썬에 대한 문법을 설명을 제대로 한 적이 없지만, 파이썬에서는 함수에서 여러개의 리턴값을 지정하는 것이 가능합니다.

2번째 인자는 아마 눈치채셨겠지만, http의 status 코드입니다. 만일 이 값을 지정하지 않을 경우, 기본값은 요청에 대한 성공을 의미하는 200을 가지게 됩니다.

즉, 404를 적지 않을 경우, 요청이 실패하는 경우가 아닌, 성공한 경우 렌더링 된 'page_not_found.html'을 띄워주게 되는 것입니다.

로깅(Logging)

로깅은 어떠한 오류나 혹은 특정한 요청 등등이 발생하면 이에 대한 로그를 남기고자 할 때 사용합니다.

애플리케이션 객체를 생성했다면 해당 객체 아래에 logger 라는 인스턴스에 접근할 수 있습니다.

아래 코드는 이전까지의 포스팅에서 사용했던 코드에 errorhandler 데코레이터를 추가한 코드입니다.

from flask import Flask, render_template app = Flask(__name__) @app.errorhandler(404) def page_not_found(error): app.logger.error(error) return render_template('page_not_found.html'), 404 @app.route("/hello/") def hello(name=None): return render_template('hello.html', name=name) if __name__ == "__main__": app.run()

이로서 페이지를 찾을 수 없을 경우, 'page_not_found.html' 을 출력하게 되며, 리턴 바로 위에 app.logger.error(error)를 호출하여 에러로그를 출력하고자 함을 알 수 있습니다.

에러가 발생할 경우, 에러메세지를 그대로 출력하게 될 것입니다.

이처럼 플라스크를 이용해 단 코드 몇 줄로 에러를 핸들링하고, 에러로그를 출력할 수 있습니다.

from http://jinblog123.tistory.com/258 by ccl(A) rewrite - 2021-12-23 19:00:32