2014-02-15 1 views
1

Я пытаюсь настроить Sentry для моего текущего веб-приложения. Это может быть configured to act as a logger.Как настроить представление исключения в Pyramid для дружественных страниц ошибок, но все же передавать ошибки в журнал?

Однако, у меня есть мнение, что Exception выглядит следующим образом:

@view_config(context=Exception, 
      renderer='hitchedup:templates/errors/500.html') 
def error_view(exc, request): 
    """Display a friendly error message""" 
    return {} 

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

Но, как я все еще пропускаю ошибки до регистратора? Прямо сейчас, представление Exception ловит все исключения, но затем они никогда не доходят до регистратора.

Я попытался поднять и поймать exc inline в представлении Exception, а затем отправить его в Sentry напрямую через клиента, но тогда я не получу полную стеклу, которую я бы получил, если бы поймал исключение, где оно было первоначально создано.

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

ответ

3

Голосовое ключевое слово raise - это билет.

Вместо того, чтобы вести журнал, захватите Exception в представлении с помощью дружественного сообщения. Затем используйте raise без аргумента, что вызывает исходное исключение. Поймайте исключение и используйте клиент Sentry, чтобы захватить его и передать его.

Окончательный вид выглядит следующим образом:

from raven.base import Client 
from pyramid.view import view_config 


@view_config(context=Exception, 
      renderer='hitchedup:templates/errors/500.html') 
def error(context, request): 
    """Display an error message and record it in Sentry.""" 
    client = Client() 
    try: 
     raise 
    except Exception: 
     client.captureException() 
    return {} 
Смежные вопросы