Frage

Ich bin mit Django 1.0 und ich bin in der Nähe meiner App zu implementieren. Als solches werde ich die DEBUG-Einstellung auf False werden zu ändern.

Mit diesem wird gesagt, würde ich immer noch die Stacktrace auf meiner 500.html Seite umfasst gerne, wenn Fehler auftreten. Auf diese Weise können Benutzer kopieren und fügen Sie den Fehler und sie leicht an die Entwickler eine E-Mail.

Alle Gedanken auf, wie man am besten dieses Problem zu nähern?

War es hilfreich?

Lösung

Sie automatisch Ihre 500s einzuloggen, auf diese Weise:

  • Sie wissen, wann sie auftreten.
  • Sie brauchen nicht auf Benutzer verlassen Sie stacktraces senden.

Joel empfiehlt gehen sogar so weit, automatisch Karten in Ihren Bug-Tracker erstellen, wenn Ihre Anwendung einen Ausfall erlebt. Persönlich erstelle ich einen (privat) RSS-Feed mit dem stacktraces, Urls, etc., die die Entwickler abonnieren können.

Es wird Stack-Traces an den Benutzer auf der anderen Seite könnte möglicherweise Informationen Leck, dass böswillige Benutzer verwenden könnten Ihre Website attackieren. Allzu detaillierte Fehlermeldungen sind eine der klassischen Sprungbrett-Injection-Angriffe auf SQL.

Bearbeiten (hinzugefügt Codebeispiel erfassen Zurückverfolgungs):

Sie können die Ausnahmeinformationen aus dem sys.exc_info Anruf erhalten. Während der Formatierung der Zurückverfolgungs zur Anzeige kommt aus dem Rückverfolgungsmodul:

import traceback
import sys

try:
    raise Exception("Message")
except:
    type, value, tb = sys.exc_info()
    print >> sys.stderr,  type.__name__, ":", value
    print >> sys.stderr, '\n'.join(traceback.format_tb(tb))

Prints:

Exception : Message
  File "exception.py", line 5, in <module>
    raise Exception("Message")

Andere Tipps

Wie @zacherates sagt, Sie wirklich nicht wollen, einen Stacktrace Ihren Benutzern angezeigt werden soll. Der einfachste Ansatz für dieses Problem ist das, was Django standardmäßig tut, wenn Sie sich selbst und Ihre Entwickler in dem ADMINS aufgeführt haben Einstellung mit E-Mail-Adressen; es sendet eine E-Mail an alle in der Liste mit dem vollständigen Stack-Trace (und mehr) jedes Mal ein mit DEBUG 500 Fehler = False.

Wenn wir wollen, Ausnahmen zeigen, die erzeugt werden, auf ur-Vorlage (500.html), dann könnten wir Ihre eigene 500 Ansicht schreiben, die Ausnahme greifen und es zu 500 Vorlagen übergeben.

Schritte:

# In views.py:

import sys,traceback

def custom_500(request):
    t = loader.get_template('500.html')

    print sys.exc_info()
    type, value, tb = sys.exc_info()
    return HttpResponseServerError(t.render(Context({
        'exception_value': value,
        'value':type,
        'tb':traceback.format_exception(type, value, tb)
    },RequestContext(request))))

# In Haupt urls.py:

from django.conf.urls.defaults import *
handler500 = 'project.web.services.views.custom_500'

# In-Vorlage (500.html):

{{ exception_value }}{{value}}{{tb}}

mehr dazu hier: https://docs.djangoproject.com/en/dev/topics/http/views/#the-500-server-error-view

Sie könnten sys.exc_info() in einer benutzerdefinierten Exception-Handler aufrufen. Aber ich empfehle, dass es nicht. Django können Sie E-Mails für Ausnahmen senden.

Ich weiß, dass dies eine alte Frage, aber in diesen Tagen würde ich empfehlen, einen Dienst mit wie Sentry erfassen Sie Ihre Fehler.

Auf Django, die Schritte sind dies bis zu setzen unglaublich einfach. Aus die Dokumentation :

  • Installieren Raven mit pip install raven
  • Fügen Sie 'raven.contrib.django.raven_compat' zu Ihrem settings.INSTALLED_APPS.
  • Fügen Sie RAVEN_CONFIG = {"dsn": YOUR_SENTRY_DSN}, um Ihre Einstellungen.

Dann auf 500 Seite (in handler500 definiert), die request.sentry.id auf die Vorlage übergeben und Ihre Benutzer die spezifischen Fehler verweisen können ohne Ihre Einbauten ausgesetzt zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top