django 1.8 공식 문서 번역: 6-6-5 오류 보고서

8013 단어 django
오류 보고
공개 사이트를 실행할 때, 설정을 항상 닫아야 합니다. DEBUG이것은 당신의 서버를 더욱 빨리 운행하게 할 뿐만 아니라, 악성 사용자가 잘못된 페이지에서 보여준 응용 프로그램의 세부 사항을 보지 못하게 할 것이다.
그러나 DEBUGFalse인 상황에서 당신의 사이트에서 발생하는 오류를 보지 못할 것입니다. 모든 사람이 공개된 오류 페이지만 볼 수 있습니다.배치된 사이트의 오류를 추적해야 하기 때문에 오류 디테일이 있는 보고서를 만들기 위해 Django를 설정할 수 있습니다.
보고서 메일
서버 오류DEBUGFalse일 때 코드가 처리되지 않은 이상이 생겼고 서버 내부 오류(HTTP 상태 코드 500)가 발생하면 Django는 ADMINS 설정 중인 사용자에게 메일을 보낸다.이것은 관리자에게 어떠한 오류도 제때에 통지할 것이다.ADMINS 오류에 대한 설명, 완전한 Python traceback, HTTP 요청과 오류에 대한 상세한 정보를 얻을 수 있습니다.
주의
메일을 보내기 위해서, DJango는 메일 서버에 어떻게 연결하는지 알려주는 설정이 필요합니다.최소한 지정EMAIL_HOST이 필요합니다. EMAIL_HOST_USEREMAIL_HOST_PASSWORD가 필요할 수도 있습니다. 필요한 다른 설정도 메일 서버의 설정에 의존할 수 있습니다.메일 관련 설정의 전체 목록을 보십시오Django 설정 문서.
Django는 보통root@localhost우편물을 보내다.그러나 일부 우편물 제공 업체들은 이 주소에서 온 모든 우편물을 거절한다.수정SERVER_EMAIL설정은 서로 다른 발신인 주소를 사용할 수 있습니다.
수신자의 메일주소를 ADMINS 설정에 넣어서 활성화합니다.
따로 만나다
서버 오류 메일은 로그 프레임워크로 보내기 때문에로그 설정 사용자 정의이 행동을 사용자 정의합니다.
404 오류
데드체인에 대한 메일을 보내기 위해 Django를 설정할 수도 있습니다. (404 "페이지를 찾을 수 없습니다"오류)Django는 404 오류 메시지를 다음과 같이 보냅니다.
  • DEBUGFalse이다.
  • 당신의 MIDDLEWARE_CLASSES 설정에는 django.middleware.common.BrokenLinkEmailsMiddleware이 포함되어 있습니다.

  • 만약 이러한 조건에 부합된다면, 코드에 404 오류가 발생하고, 리퍼를 요청하면, Django는 MANAGERS 의 사용자에게 메일을 보낼 것입니다.(It doesn’t bother to email for 404s that don’t have a referer – those are usually just people typing in broken URLs or broken Web ‘bots).
    주의BrokenLinkEmailsMiddleware는 404 오류를 차단하는 다른 중간부품 앞에 나타나야 한다. 예를 들어 LocaleMiddleware 또는 FlatpageFallbackMiddleware.그것을 네 MIDDLEWARE_CLASSES 설치의 맨 위에 놓아라.
    설정IGNORABLE_404_URLS을 조정해서 Django에게 특정한 404 오류를 보고하지 말라고 할 수 있습니다.그것은 컴파일된 정규 표현식의 대상을 포함하는 원조여야 한다.예를 들면 다음과 같습니다.
    import re
    IGNORABLE_404_URLS = (
        re.compile(r'\.(php|cgi)$'),
        re.compile(r'^/phpmyadmin/'),
    )
    

    이 예에서 .php 또는 .cgi로 끝나는 URL의 404 오류는할 줄 모르다보고하다./phpmyadmin/로 시작하는 URL은 없습니다.
    다음 예에서는 브라우저나 파충류가 자주 요청하는 URL을 제거하는 방법을 보여 줍니다.
    import re
    IGNORABLE_404_URLS = (
        re.compile(r'^/apple-touch-icon.*\.png$'),
        re.compile(r'^/favicon\.ico$'),
        re.compile(r'^/robots\.txt$'),
    )
    

    (이것들은 정규 표현식이므로 마침표 앞에 반사선을 넣어 뜻을 바꿔야 한다.)
    만약 사용자 정의 django.middleware.common.BrokenLinkEmailsMiddleware 의 행동 (예를 들어 웹 파충류의 요청을 무시하는 것) 을 더 이상 원한다면, 그것을 계승하고 복제하는 방법을 사용해야 한다.
    따로 만나다
    404 오류는 로그 프레임워크로 기록됩니다.보통 로그 기록은 무시되지만, 적당한 프로세서와 를 작성할 수 있습니다.구성 로그,오류 보고에 사용합니다.
    오류 보고서 필터링
    민감한 정보 필터링
    오류 보고서는 오류의 디버깅과 유용하기 때문에, 보통 이 오류에 대해 가능한 한 많은 정보를 기록합니다.예를 들어 보통 DJango는 발생하는 이상을 완전한traceback,traceback 프레임의 모든 부분 변수와 HttpRequest의 로 기록한다.속성.
    그러나 때때로 특정한 메시지 유형이 매우 민감해서 사용자의 비밀번호나 신용카드 번호 등 정보를 추적하기에 적합하지 않다.그래서 Django는 생산 환경(즉 DEBUG의 오류 보고서에서 필터링해야 하는 정보를 제어할 수 있도록 함수 장식기를 제공합니다. Falsesensitive_variables()입니다.sensitive_post_parameters() (_*variables_)[source]
    코드의 함수 (보기나 일반적인 리셋) 가 민감한 정보를 포함할 수 있는 국부 변수를 사용한다면, 오류 보고가 이 변수의 값을 포함하는 것을 막기 위해 sensitive_variables 장식기를 사용해야 할 수도 있습니다.
    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
        ...
    

    위의 예에서 sensitive_variables, userpw 변수의 값은 오류 보고서에 숨겨지고 별표(**)로 대체됩니다. cc 변수의 값은 공개되지만.
    오류 보고서에 함수의 모든 부분 변수를 순서대로 숨기려면 name 장식기에 매개 변수를 제공하지 마십시오.
    @sensitive_variables()
    def my_function():
        ...
    

    여러 개의 장식기를 사용할 때
    숨겨진 변수도 함수의 매개 변수 (예: 아래 예시 sensitive_variables 이고 장식된 함수가 여러 개 있다면, user 장식기 체인의 맨 끝에 놓아야 합니다.이 메서드는 다른 데코더를 통해 전달되더라도 함수 매개변수를 숨깁니다.
    @sensitive_variables('user', 'pw', 'cc')
    @some_decorator
    @another_decorator
    def process_info(user):
        ...
    
    @sensitive_variables (_*parameters_)[source]
    코드의 한 보기에서 민감한 정보를 받을 수 있는 sensitive_post_parameters POST 대상이 있다면, 오류 보고서에 포함된 파라미터의 값을 막기 위해 HttpRequest 장식기를 사용해야 할 수도 있습니다.
    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'])
        ...
    

    위의 예에서 sensitive_post_parameterspass_wordPOST 매개 변수의 값은 오류 보고서에 숨겨지고 별표(**)로 대체됩니다. credit_card_number 변수의 값은 공개되지만.
    오류 보고서에 요청한 모든 POST 매개 변수를 순서대로 숨기려면 name 장식기에 매개 변수를 제공하지 마십시오.
    @sensitive_post_parameters()
    def my_view(request):
        ...
    

    모든 POST 매개 변수는 특정한 sensitive_post_parameters 보기의 오류 보고서 (django.contrib.auth.views, login, password_reset_confirm, password_changeadd_viewauth 를 순서대로 필터하여 사용자 비밀번호와 같은 민감한 정보의 유출을 방지합니다.
    사용자 정의 오류 보고서
    모든 user_change_passwordsensitive_variables()는 각각 민감한 변수의 이름으로 장식된 함수에 주석을 추가하고, POST 민감한 파라미터의 이름으로 sensitive_post_parameters() 대상에 주석을 추가하여 오류가 발생했을 때 보고서의 민감한 정보를 나중에 필터할 수 있도록 한다.Django의 기본 버그 패키지 필터 HttpRequest 는 실제 필터 작업을 완성합니다.오류 보고가 발생하면 이 필터는 장식기의 주석을 사용하여 해당하는 값을 별표(**)로 바꿉니다.사이트 전체를 덮어쓰거나 기본 속성을 사용자 정의하려면 필터 종류를 정의하고 django.views.debug.SafeExceptionReporterFilter 설정을 통해 Django를 사용해야 합니다.
    DEFAULT_EXCEPTION_REPORTER_FILTER = 'path.to.your.CustomExceptionReporterFilter'
    

    제공된 보기에서 어떤 필터를 사용하는지 설정 DEFAULT_EXCEPTION_REPORTER_FILTERHttpRequest 속성을 통해 더 정교하게 제어할 수도 있습니다.
    def my_view(request):
        if request.user.is_authenticated():
            request.exception_reporter_filter = CustomExceptionReporterFilter()
        ...
    

    사용자 정의 필터 클래스는 exception_reporter_filter 계승되어야 하며, 다음 방법을 다시 써야 할 수도 있습니다.
    _class _ django.views.debug.SafeExceptionReporterFilter [source] SafeExceptionReporterFilter `is_active`(_request_)[source]
    다른 방법에서 조작한 필터가 활성화되면 되돌아오기 SafeExceptionReporterFilter..TrueDEBUG이면 보통 필터가 활성화됩니다.False `get_request_repr`(_request_)
    Returns the representation string of the request object, that is, the value that would be returned by SafeExceptionReporterFilter. , except it uses the filtered dictionary of POST parameters as determined by repr(request) . SafeExceptionReporterFilter.get_post_parameters() `get_post_parameters`(_request_)[source]
    필터링된 POST 매개변수 사전을 반환합니다.일반적으로 민감한 매개변수의 값을 별표(**)로 대체합니다.SafeExceptionReporterFilter. `get_traceback_frame_variables`(_request_, _tb_frame_)[source]
    필터된 트레이스백 프레임의 국부 변수를 제공하는 사전을 되돌려줍니다.일반적으로 민감한 변수의 값을 별표(**)로 바꿉니다.
    따로 만나다
    너도 사용자 정의 를 작성할 수 있다exception middleware_사용자 정의 오류 보고서를 만듭니다.사용자 정의 오류 프로세서를 만드셨다면, 아날로그 Django에서 만든 오류 프로세서를 모의하십시오. SafeExceptionReporterFilter.DEBUG 일 때만 오류를 보고하거나 기록하는 것은 좋은 생각입니다.
    번역자: Django 문서 공동 번역 팀, 원문: Tracking code errors by email.
    본고는 CC BY-NC-SA 3.0 프로토콜로 발표되었으며 전재는 작가의 서명과 글의 출처를 보존해 주십시오.
    Django 문서 협동 번역팀은 일손이 부족해서 관심 있는 친구가 우리에 가입할 수 있습니다. 완전 공익적입니다.교류군: 467338606.

    좋은 웹페이지 즐겨찾기