Django Unhandled Exception - PullRequest
       19

Django Unhandled Exception

9 голосов
/ 18 декабря 2009

Он работает в режиме DEBUG = True. Иногда он может выдать сообщение об ошибке с информацией трассировки при обнаружении ошибки, но иногда он просто отображает следующие строки:

Unhandled Exception

An unhandled exception was thrown by the application.

Я должен переключиться на сервер разработки, чтобы увидеть подробное сообщение.

Как сделать так, чтобы оно всегда отображало сообщение трассировки при обнаружении ошибки?

Ответы [ 4 ]

9 голосов
/ 03 января 2011

Просто подключитесь к сигналу got_request_exception и зарегистрируйте исключение:

from django.core.signals import got_request_exception
import logging    

def log(*args, **kwargs):
    logging.exception('error')

got_request_exception.connect(log)

Это запишет весь след. На сервере dev он регистрируется в консоли.

6 голосов
/ 18 декабря 2009

Может быть, вы можете использовать этот фрагмент, это будет регистрировать исключения в журнале Apache:

utils.py * * 1004

def log_traceback(exception, args):
    import sys, traceback, logging
    exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
    logging.debug(exception)
    logging.debug(args)
    for tb in traceback.format_exception(exceptionType, exceptionValue, exceptionTraceback):
        logging.debug(tb)

site_logging.py

import logging
import sys

logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stderr)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

Поместите это в свой settings.py:

import site_logging

А в вашем коде:

from where.is.your.utils import log_traceback
try:
   `do something`
except Exception, args:
    log_traceback(Exception, args)
4 голосов
/ 18 декабря 2009

Используете ли вы Apache?
Интересно, это ваша среда производства или разработки, где вы хотите увидеть трассировку?

Из Книги DJango по безопасности - Открытые сообщения об ошибках

Пользователи, развертывающие под Apache и mod_python, также должны убедиться, что у них отключен PythonDebug в их файлах Apache conf; это гарантирует, что любые ошибки, возникшие до того, как у Django была возможность загрузить, не будут отображаться публично.

Полагаю, вы хотите включить PythonDebug, это рекомендуется только для разработки.

1 голос
/ 18 декабря 2009

Это то, для чего используется DEBUG = True: для отображения полной трассировки. Идея состоит в том, что обычные пользователи не хотят (и не хотят, чтобы они) видели что-либо, кроме простого сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...