2017-10-29 14 views
0

djangoで例外が発生した場合、ADMINにメールを送信しようとしています。だから私は試したが解決策を見つけることができなかった。エラーメールを管理者に送信する方法についての明確な考えがありません 助けていただければ幸いです。エラーメッセージをDjangoの管理者に送信

Views.py

def emit(self, record): 
    try: 
     request = record.request 
     subject = '%s (%s IP): %s' % (
      record.levelname, 
      ('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS 
      else 'EXTERNAL'), 
      record.getMessage() 
     ) 
     filter = get_exception_reporter_filter(request) 
     request_repr = '\n{}'.format(force_text(filter.get_request_repr(request))) 
    except Exception: 
     subject = '%s: %s' % (
      record.levelname, 
      record.getMessage() 
     ) 
     request = None 
     request_repr = "unavailable" 
    subject = self.format_subject(subject) 

    if record.exc_info: 
     exc_info = record.exc_info 
    else: 
     exc_info = (None, record.getMessage(), None) 

    message = "%s\n\nRequest repr(): %s" % (self.format(record), request_repr) 
    reporter = ExceptionReporter(request, is_email=True, *exc_info) 
    html_message = reporter.get_traceback_html() if self.include_html else None 
    self.send_mail(subject, message, fail_silently=True, html_message=html_message) 

def send_mail(self, subject, message, *args, **kwargs): 
    mail.mail_admins(subject, message, *args, connection=self.connection(), **kwargs) 


def connection(self): 
    return get_connection(backend=self.email_backend, fail_silently=True) 

def format_subject(self, subject): 
    """ 
    Escape CR and LF characters, and limit length. 
    RFC 2822's hard limit is 998 characters per line. So, minus "Subject: " 
    the actual subject must be no longer than 989 characters. 
    """ 
    formatted_subject = subject.replace('\n', '\\n').replace('\r', '\\r') 
    return formatted_subject[:989] 

def test_view(request): 
    try: 
     raise Exception 
    except Exception as e: 
     send_mail(self, subject, message, *args, **kwargs) 

logger_setting.py

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse', 
     }, 
     'require_debug_true': { 
      '()': 'django.utils.log.RequireDebugTrue', 
     }, 
    }, 
    'handlers': { 
     'console': { 
      'level': 'INFO', 
      'filters': ['require_debug_true'], 
      'class': 'logging.StreamHandler', 
     }, 
     'null': { 
      'class': 'logging.NullHandler', 
     }, 
     'mail_admins': { 
      'level': 'ERROR', 
      'filters': ['require_debug_false'], 
      'class': 'django.utils.log.AdminEmailHandler' 
     } 
    }, 
    'loggers': { 
     'django': { 
      'handlers': ['console'], 
     }, 
     'django.request': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': False, 
     }, 
     'django.security': { 
      'handlers': ['mail_admins'], 
      'level': 'ERROR', 
      'propagate': False, 
     }, 
     'py.warnings': { 
      'handlers': ['console'], 
     }, 
    } 
} 

私はまた、次のように私view.pyコードを変更することで試みたが、いずれかのエラーメール

import sys 
import traceback 
from django.core import mail 
from django.views.debug import ExceptionReporter 

def send_manually_exception_email(request, e): 
    exc_info = sys.exc_info() 
    reporter = ExceptionReporter(request, is_email=True, *exc_info) 
    subject = e.message.replace('\n', '\\n').replace('\r', '\\r')[:989] 
    message = "%s\n\n%s" % (
     '\n'.join(traceback.format_exception(*exc_info)), 
     reporter.filter.get_request_repr(request) 
    ) 
    mail.mail_admins(
     subject, message, fail_silently=True, 
     html_message=reporter.get_traceback_html() 
    ) 
ませんでした

テストexception-

def test_view(request): 
    try: 
     raise Exception 
    except Exception as e: 
     send_manually_exception_email(request, e) 

答えて

0

初の生成は、次の手順に従います。https://docs.djangoproject.com/en/1.11/howto/error-reporting/#email-reports

とEMAIL_HOST、EMAIL_HOST_USER、EMAIL_HOST_PASSWORD、ADMINS、およびSERVER_EMAILのための設定を行います。

また、メールサーバーを設定する必要があります。手始めに、これらのいずれかを行います:

  • 電子メールプログラムのためのPythonのデバッグの電子メールサーバ
  • (Sendgridのような)電子メールサーバ
  • (sendmailのような) python -m smtpd -n -c DebuggingServer localhost:1025

値設定は選択した電子メールサーバーと一致する必要があります。

設定から最初に設定されたシンプルなケースを得るまで、ロギングで電子メールを使用することは心配しないでください。

関連する問題