Как я включаю stacktrace в свою страницу 500.html Django?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
23
задан Hedde van der Heide 2 May 2013 в 08:10
поделиться

3 ответа

Автоматически зарегистрируйте свои 500 с, тот путь:

  • Вы знаете, когда они происходят.
  • Вы не должны полагаться на пользователей, отправляющих Вам stacktraces.

Joel рекомендует даже идти, автоматически создавая тикеты в Вашем средстве отслеживания ошибки, когда Ваше приложение испытывает отказ. Лично, я создаю (частный) канал RSS с stacktraces, URL, и т.д. что разработчики могут подписаться на.

отслеживания стека Показа Вашим пользователям, с другой стороны, могли возможно пропустить информацию, которую злонамеренные пользователи могли использовать для нападения на сайт. Чрезмерно подробные сообщения об ошибках являются одной из классических стартовых площадок для атак с использованием кода на SQL.

Редактирование (добавленный пример кода для получения traceback):

можно получить информацию об исключении от вызова sys.exc_info. В то время как форматирование traceback для дисплея прибывает из traceback модуля:

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))

Печать:

Exception : Message
  File "exception.py", line 5, in <module>
    raise Exception("Message")
16
ответ дан 29 November 2019 в 02:34
поделиться

Как @zacherates говорит, Вы действительно не хотите отображать stacktrace своим пользователям. Самый легкий подход к этой проблеме - то, что Django делает по умолчанию, если Вы имеете самостоятельно и Ваши разработчики, перечисленные в установке ADMINS с адресами электронной почты; это посылает электронное письмо всем в том списке с полным отслеживанием стека (и больше) каждый раз существует 500 ошибок с ОТЛАДКОЙ = Ложь.

11
ответ дан 29 November 2019 в 02:34
поделиться

Вы могли звонить sys.exc_info() в пользовательский обработчик исключений. Но я не рекомендую это. Django может послать Вам электронные письма для исключений.

1
ответ дан 29 November 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: