Ja, Sie können E-Mail-Fehlerbericht manuell senden, auch wenn Sie die Ausnahme abfangen.
Es gibt mehrere Möglichkeiten, wie Sie das erreichen können.
- Sie können die vorhandenen Standardlogger Konfiguration verwenden (und die zugehörige Verarbeitungsroutine Konfiguration dokumentiert here) für django.request, die alle Fehlermeldungen an den mail_admins Handler sendet, die die etwas mit log.error von django angemeldet sendet. Anfrage, wenn das Debugging falsch ist, als E-Mail unter Verwendung von AdminEmailHandler, dessen bestehender Anrufpunkt in handle_uncaught_exception liegt.
- Sie können zusätzliche Loggerkonfiguration hinzufügen, die denselben Handler verwendet, um Ihre Ausnahme früher als django.request abzufangen und log.error früher aufzurufen.
- Sie können django.request spezifisch ableiten, nämlich handle_uncaught_exception.
- Sie können eine eigene Middleware (for example StandardExceptionMiddleware) verwenden oder ExceptionMiddleware
- Sie können den Inhalt von emit in
AdminEmailHandler
oder mail.mail_admins direkt manuell aufrufen.
Von diesen Optionen scheint Option 4 am häufigsten zu sein.
Basierend auf den zusätzlichen Informationen in Ihrem Kommentar ein Codebeispiel von 2 ist unten.
Zuerst wird der Code, der diese
from django.http import HttpResponse
import logging
logger = logging.getLogger(__name__)
def my_view(request):
try:
result = do_something()
return HttpResponse('<h1>Page was found' + result + '</h1>')
except Exception:
# Can have whatever status_code and title you like, but I was just matching the existing call.
logger.error('Internal Server Error: %s', request.path,
exc_info=sys.exc_info(),
extra={
'status_code': 500,
'request': request
}
)
return HttpResponse('<h1>Page was found, and exception was mailed to admins.</h1>')
basiert von Django documentation for view writing und and introduction to Django logging, aber wurde nicht geprüft sehen hinzugefügt werden würde.
Dann wird die zusätzliche Logger-Konfiguration wird auf dem auf den Logger Eintrag hinzufügen (per here)
'nameofdjangoapplicationgoeshere': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
Süßeste! Und obwohl keine Antwort genau den Fehlerbericht erzeugt, der automatisch generiert wird, gab dieser Ansatz die meisten Informationen. Es ist ähnlich wie die Fehlerseite Django zeigt mit 'DEBUG = True' – frnhr
Ich bekomme einen Fehler in Zeile Nr. 9. Es heißt:' 'Exception' Objekt hat kein Attribut 'Nachricht'' –
hinzugefügt eine Bearbeitung, damit es funktioniert python 3 – maxbellec