---
title: "오류 알림"
version: 3.2
locale: ko
source: https://docs.djangoproject.com/ko/3.2/howto/error-reporting/
canonical: https://djangodocs.dev/ko/3.2/howto/error-reporting/
---
# 오류 알림

공용 사이트를 실행할 때는 항상 :설정 기능을 해제해야 합니다.’DEBUG’ 설정입니다. 이렇게 하면 서버가 훨씬 더 빨리 실행될 수 있으며, 악성 사용자가 오류 페이지에서 나타날 수 있는 응용프로그램의 세부 정보를 볼 수 없게 됩니다.

그러나 :설정으로 실행:디버그가 “거짓”으로 설정된 것은 당신의 사이트에서 발생한 오류를 절대 보지 못한다는 것을 의미하며, 그 대신 모든 사람이 당신의 공개 오류 페이지를 보게 될 것이다. 배포된 사이트에서 발생하는 오류를 추적해야 하므로 Django가 이러한 오류에 대한 세부 정보가 포함된 보고서를 생성하도록 구성할 수 있습니다.

## 이메일 보고

### 서버 오류

시기:설정:DEBUG는 “False”이며, Django는 다음과 같은 설정에 나열된 사용자에게 e-메일을 보낼 것이다.코드가 처리되지 않은 예외를 발생시키고 내부 서버 오류가 발생할 때마다 ‘ADMIN’을 설정합니다( 엄밀히 말하면 HTTP 상태 코드가 500 이상인 응답의 경우). 이렇게 하면 관리자는 오류를 즉시 알 수 있습니다. :설정:’ADMIN’은 오류에 대한 설명, 완전한 Python 추적, 오류를 발생시킨 HTTP 요청에 대한 세부 정보를 얻을 것이다.

> **Note**
>
> 전자 메일을 보내기 위해 Django는 메일 서버에 연결하는 방법을 알려주는 몇 가지 설정이 필요합니다. 최소한 설정:을 지정해야 합니다.’E-MAIL\_HOST’ 및 가능한 설정:’EMAIL\_HOST\_USER’ 및 :설정:메일 서버의 구성에 따라 다른 설정이 필요할 수도 있지만 ‘EMAIL\_HOST\_PASSWORD’입니다. 이메일 관련 설정의 전체 목록은 :doc:’Django 설정 설명서’를 참조하십시오.

기본적으로 Django는 root@localhost에서 이메일을 전송합니다. 그러나 일부 메일 공급자는 이 주소의 모든 전자 메일을 거부합니다. 다른 발송인 주소를 사용하려면 :seting:’을 수정하십시오.SERVER\_EMail’ 설정입니다.

이 동작을 활성화하려면 수신자의 전자 메일 주소를 : 설정에 입력하십시오.’ADMIN’ 설정.

> **See also**
>
> 서버 오류 전자 메일은 로깅 프레임워크를 사용하여 전송되므로 :doc:’로그 구성 사용자 지정’을 통해 이 동작을 사용자 지정할 수 있습니다.

### 404 오류

끊어진 링크에 대한 전자 메일 오류(404 “페이지 없음” 오류)로 Django를 구성할 수도 있습니다. Django는 다음과 같은 경우 약 404개의 오류를 이메일로 전송합니다.

-  는 “거짓”이다
- 설정:MIDDLEWARE 설정은 [`django.middleware.common.BrokenLinkEmailsMiddleware`](/ko/3.2/ref/middleware/#django.middleware.common.BrokenLinkEmailsMiddleware).을 포함된다

이러한 조건이 충족되면 Django는 :seting에 나열된 사용자에게 e-메일을 보냅니다.당신의 코드가 404를 올리고 요청에 레퍼러가 있을 때마다 ‘매니저즈’가 설정된다. 참조자가 없는 404대에게는 이메일로 보내는 것이 귀찮지 않습니다. 대개는 고장난 URL이나 고장난 웹 봇을 타이핑하는 사람들이죠. 또한 레퍼러가 요청한 URL과 동일한 경우 404초도 무시합니다. 이 동작도 손상된 웹 봇에서 발생되기 때문입니다.

> **Note**
>
> :class:’~django.middleware.common.’BreakedLink Emails Middleware’는 다음과 같은 404개의 오류를 가로채는 미들웨어 앞에 나타나야 한다.’~django.middleware.maddle.maddle’LocalMiddleware’ 또는 :class:’~django.the’납작한 페이지. 미들웨어플랫 페이지 폴백 미들웨어’. 설정:의 맨 위 설정:미들웨어 설정.

: setting을 수정하여 Django에게 특정 404s에 대한 보고를 중지하라고 지시할 수 있습니다.IGNORABLE\_404\_URL의 설정입니다. 컴파일된 정규식 개체의 목록이어야 합니다.

```
import re
IGNORABLE_404_URLS = [
    re.compile(r'\.(php|cgi)$'),
    re.compile(r'^/phpmyadmin/'),
]
```

: 설정을 수정하여 Django에게 특정 404에 대한 보고를 중지하도록 지시할 수 있습니다.IGNERGABLE\_404\_URL에 대한 설정. 컴파일된 정규식 개체 목록이어야 합니다. 예:

다음 예에서는 브라우저 및 크롤러가 자주 요청하는 일부 기존 URL을 제외하는 방법을 보여 줍니다.

```
import re
IGNORABLE_404_URLS = [
    re.compile(r'^/apple-touch-icon.*\.png$'),
    re.compile(r'^/favicon\.ico$'),
    re.compile(r'^/robots\.txt$'),
]
```

(참고로 이것들은 정규 표현식입니다. 그래서 우리는 그것들을 피하기 위해 기간 앞에 역슬래시를 붙였습니다.)

:class:django.middleware.common의 동작을 사용자 지정하려면끊어진 링크 이메일 미들웨어의 추가(예: 웹 크롤러에서 오는 요청을 무시하려면)를 하위 분류하고 메소드를 재정의해야 합니다.

> **See also**
>
> 404개의 오류는 로깅 프레임워크를 사용하여 기록됩니다. 기본적으로 이러한 로그 레코드는 무시되지만, 처리기와 :doc:’로그 구성’을 적절하게 작성하여 오류 보고에 사용할 수 있습니다.

## 오류 보고서 필터링

> **Warning**
>
> 중요한 데이터를 필터링하는 것은 어려운 문제이며 중요한 데이터가 오류 보고서에 유출되지 않도록 보장하는 것은 거의 불가능합니다. 따라서 오류 보고서는 신뢰할 수 있는 팀 구성원만 사용할 수 있어야 하며, 전자 메일 등의 인터넷을 통해 암호화되지 않은 오류 보고서를 전송하지 않아야 합니다.

### 중요한 정보 필터링

오류 보고서는 오류를 디버깅하는 데 매우 유용하므로 일반적으로 이러한 오류에 대한 관련 정보를 가능한 많이 기록하는 것이 유용합니다. 예를 들어, 기본적으로 Django는 제기된 예외에 대해 ‘full traceback’\_, 각 ‘traceback frame’\_의 로컬 변수 및 :class를 기록합니다.’~django.the’HttpRequest’s:ref:’attributes1’입니다.

그러나 때로는 특정 유형의 정보가 너무 민감하여 사용자의 암호 또는 신용 카드 번호와 같이 추적하기에 적절하지 않을 수 있다. 따라서 :설정의 설명에 따라 중요한 설정을 필터링하는 것 외에도 다음과 같은 작업을 수행할 수 있습니다.’DEBUG’ 설명서인 Django는 실운영 환경에서 오류 보고서(여기서: setting: setting:디버그는 func:’sensitive\_variables’와 func:’sensitive\_post\_parameters’로 설정되어 있다.

#### `sensitive_variables(*variables)`

코드의 함수(보기 또는 일반 콜백)가 중요한 정보를 포함할 수 있는 로컬 변수를 사용하는 경우 “sensitive\_variables” decorator를 사용하여 해당 변수 값이 오류 보고서에 포함되지 않도록 방지할 수 있습니다.

```
from django.views.decorators.debug import sensitive_variables

@sensitive_variables('user', 'pw', 'cc')
def process_info(user):
    pw = user.pass_word
    cc = user.credit_card_number
    name = user.name
    ...
```

위의 예에서 “user”, “pw” 및 “cc” 변수의 값은 오류 보고에 숨겨져 별(’**\*\*\*\*\*\*\*\*\***)로 대체되며 “name” 변수의 값은 공개된다.

오류 로그에서 함수의 모든 로컬 변수를 체계적으로 숨기려면 “sensitive\_variables” decorator에 어떤 인수도 제공하지 마십시오.

```
@sensitive_variables()
def my_function():
    ...
```

> **여러 개의 장식자를 사용하는 경우**
>
> 숨기려는 변수가 함수 인수(예: 다음 예에서는 ‘user’ user’)이고, 장식된 함수에 여러 개의 장식기가 있는 경우, 반드시 “@sensitive\_variables”를 장식자 체인의 맨 위에 놓아야 한다. 이렇게 하면 다른 장식자를 통과할 때 함수 인수도 숨겨집니다.
>
> ```
> @sensitive_variables('user', 'pw', 'cc')
> @some_decorator
> @another_decorator
> def process_info(user):
>     ...
> ```

#### `sensitive_post_parameters(*parameters)`

만약 당신의 견해를 피력하는을 받는다:수업:~django.http.HttpRequest 개체:항목을 보강:POSTparameters\<django.http.HttpRequest.POST\>\`민감한 정보를 담아 취약해 당신은 예방할 수 있다.이런 변수들의 오류 보고서도\`\`sensitive\_post\_parameters”실내 장식가를 사용하여 포함되는에서 값::.

```
from django.views.decorators.debug import sensitive_post_parameters

@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
    UserProfile.create(
        user=request.user,
        password=request.POST['pass_word'],
        credit_card=request.POST['credit_card_number'],
        name=request.POST['name'],
    )
    ...
```

위의 예에서 “pass\_word”와 “credit\_card\_number” POST 매개 변수의 값은 오류 보고 내 요청 표현에 숨겨져 별(’**\*\*\*\***’)로 대체되며, “이름” 매개 변수의 값은 공개된다.

오류 보고서에서 요청의 모든 POST 매개 변수를 체계적으로 숨기려면 sensitive\_post\_parameters” 장식자에게 어떤 인수도 제공하지 마십시오.

```
@sensitive_post_parameters()
def my_view(request):
    ...
```

모든 POST 매개 변수는 특정:mod:’django.contrib에 대한 오류 보고서에서 체계적으로 필터링됩니다.auth.password, password\_reset\_password”, “password\_changes”, “add\_view” 및 “user\_change\_password in auth 관리자”에서 보기 때문에 사용자 암호와 같은 중요한 정보가 유출되는 것을 방지할 수 있다.

### 사용자 정의 오류 리포트

func:’sensitive\_variables’와 :func:’sensitive\_post\_parameters’ do는 각각 민감한 변수의 이름으로 장식된 함수에 주석을 달고 “HttpRequest” 객체에 민감한 POST 매개 변수의 이름으로 주석을 달기 때문에 오류가 발생할 때 이러한 민감한 정보가 보고서에서 필터링될 수 있다. 실제 필터링은 Django의 기본 오류 리포터 필터 :class:’django에 의해 수행됩니다.경치, 경치,경치SafeExceptionReporterFilter’. 이 필터는 오류 보고가 생성될 때 장식자의 주석을 사용하여 해당 값을 별(’**\*\*\*\***’)로 바꿉니다. 전체 사이트에 대해 이 기본 동작을 재정의하거나 사용자 지정하려면 사용자 고유의 필터 클래스를 정의하고 Django에게 :seting:을 통해 사용하도록 지시해야 합니다.’DEFAULT\_EXTECTION\_REPORTER\_FILTER’ 설정:

```
DEFAULT_EXCEPTION_REPORTER_FILTER = 'path.to.your.CustomExceptionReporterFilter'
```

또한 HttpRequest”의 exception\_reporter\_filter” 속성을 설정하여 어떤 필터를 어떤 뷰에서 사용할지 보다 세밀하게 제어할 수도 있다.

```
def my_view(request):
    if request.user.is_authenticated:
        request.exception_reporter_filter = CustomExceptionReporterFilter()
    ...
```

사용자 지정 필터 클래스는 :class:’django’에서 상속해야 합니다.경치, 경치,경치SafeExceptionReporterFilter’는 다음과 같은 특성 및 방법을 재정의할 수 있습니다.

#### `class SafeExceptionReporterFilter`

#### `cleansed_substitute`

> **New in Django 3.1**

중요한 값을 대체할 문자열 값입니다. 기본적으로 이것은 민감한 변수의 값을 별(’**\*\*\*\*\*\***’)로 바꿉니다.

#### `hidden_settings`

> **New in Django 3.1**

설정 및 요청”을 일치시키는 데 사용되는 컴파일된 정규식 개체입니다.META의 가치는 민감한 것으로 간주되고 있습니다. 기본적으로 다음과 같습니다.

```
import re

re.compile(r'API|TOKEN|KEY|SECRET|PASS|SIGNATURE', flags=re.IGNORECASE)
```

#### `is_active(request)`

:meth:’get\_post\_parameters’ 및 :meth:’get\_traceback\_frame\_variables’에서 필터링을 활성화하기 위해 “True”를 반환합니다. 다음과 같은 경우 필터는 기본적으로 활성화됩니다.디버그는 거짓입니다. 민감한 요청”에 주목하십시오.META의 값은 :설정에서 설명한 대로 항상 민감한 설정값과 함께 필터링됩니다.’DEBUG’ 설명서입니다.

#### `get_post_parameters(request)`

POST 매개 변수의 필터링된 사전을 반환합니다. 중요한 값은 다음과 같이 대체됩니다. attr:’cleaned\_substitute’.

#### `get_traceback_frame_variables(request, tb_frame)`

지정된 추적 프레임에 대해 필터링된 로컬 변수 사전을 반환합니다. 중요한 값은 다음과 같이 대체됩니다. attr:’cleaned\_substitute’.

> **New in Django 3.1**

필터링 이외의 오류 보고서를 사용자 정의해야 하는 경우 :setup을 정의하여 사용자 정의 오류 보고자 클래스를 지정할 수 있습니다.’DEF\_EXPECTION\_REPORT’ 설정은 다음과 같습니다.

```
DEFAULT_EXCEPTION_REPORTER = 'path.to.your.CustomExceptionReporter'
```

예외 리포터는 예외 리포트 데이터를 컴파일하여 텍스트 또는 HTML로 적절하게 포맷할 책임이 있습니다. (예외 리포터는 : setting:예외 리포트 데이터를 준비할 때 ‘DEFAT\_REPORTER\_FILTER’를 입력하세요.)

사용자 정의 리포터 클래스는 [`django.views.debug.ExceptionReporter`](#django.views.debug.ExceptionReporter).에서 상속해야 합니다.

#### `class ExceptionReporter`

#### `html_template_path`

> **New in Django 3.2**

Property that returns a [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html#pathlib.Path) representing the absolute
filesystem path to a template for rendering the HTML representation of
the exception. Defaults to the Django provided template.

#### `text_template_path`

> **New in Django 3.2**

Property that returns a [`pathlib.Path`](https://docs.python.org/3/library/pathlib.html#pathlib.Path) representing the absolute
filesystem path to a template for rendering the plain-text
representation of the exception. Defaults to the Django provided
template.

#### `get_traceback_data()`

추적 정보가 들어 있는 사전을 반환합니다.

예외 보고서를 사용자 지정하기 위한 기본 확장 지점입니다. 예:

```
from django.views.debug import ExceptionReporter

class CustomExceptionReporter(ExceptionReporter):
    def get_traceback_data(self):
        data = super().get_traceback_data()
        # ... remove/add something here ...
        return data
```

#### `get_traceback_html()`

예외 보고서의 HTML 버전을 반환합니다.

디버그 500 HTTP 오류 페이지의 HTML 버전에 사용됩니다.

#### `get_traceback_text()`

예외 보고서의 일반 텍스트 버전을 반환합니다.

디버그 500 HTTP 오류 페이지 및 전자 메일 보고서의 일반 텍스트 버전에 사용됩니다.

필터 클래스와 마찬가지로 “HttpRequest”의 “exception\_reporter\_class” 속성을 설정하여 지정된 보기 내에서 사용할 예외 리포터 클래스를 제어할 수 있습니다.

```
def my_view(request):
    if request.user.is_authenticated:
        request.exception_reporter_class = CustomExceptionReporter()
    ...
```

> **See also**
>
> 또한 :ref의 사용자 정의 부분을 작성하여 사용자 정의 오류 보고를 설정할 수도 있습니다.’중략 미들웨어’입니다. 사용자 정의 오류 처리를 작성하는 경우 다음과 같은 경우 Django의 기본 오류 처리를 에뮬레이트하는 것이 좋습니다.디버그는 거짓입니다.
