如何在django视图中使用sentry / raven

时间:2012-05-30 19:24:03

标签: django logging sentry raven

我设法成功安装了哨兵,我可以在localhost上看到哨兵界面的webservice并做了

raven test http://jsifslkdjfklsdfjklsdjfklMYCODE 

有效,测试显示在界面中。

问题是我找不到任何关于我应该在视角和设置上放置什么的示例或文档。

我知道我必须添加到我的INSTALLED_APPS

'岗哨', 'raven.contrib.django',

我还添加了

SENTRY_DNS = 'http://jsifslkdjfklsdfjklsdjfklMYCODE'

接下来的两行显示在文档中,但它没有说明它们去哪里

from raven.contrib.django.models import client
client.captureException()

我在settings.py尝试了但仍然无法记录我的观点。 我还添加了这个

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'root': {
        'level': 'WARNING',
        'handlers': ['sentry'],
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'sentry': {
            'level': 'ERROR',
            'class': 'raven.contrib.django.handlers.SentryHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

在我看来,我补充说:

import logging
logger = logging.getLogger()

def home(request,template_name): 
    logger.error('There was some crazy error lol', exc_info=True, extra={'request': request, })
    return render_to_response(template_name,context, context_instance=RequestContext(request))

我没有其他与您在此处看到的内容相关的代码,我缺少什么?

2 个答案:

答案 0 :(得分:8)

你的'乌鸦'记录器实际上并没有使用哨兵处理程序,只是写入'console'。有同样的问题。乌鸦/哨兵的文件缺乏优秀的作家。

将您的乌鸦记录器更改为:

'raven': {
            'level': 'DEBUG',
            'handlers': ['console', 'sentry'],
            'propagate': False,
         },

并确保将其用作记录器:

logger = logging.getLogger('raven')

答案 1 :(得分:1)

我必须在我的settings.py上使用这个怪物:

import logging
# from raven.contrib.django.handlers import SentryHandler 
from raven.handlers.logging import SentryHandler

logging.getLogger().setLevel(logging.INFO)
logger = logging.getLogger()# ensure we havent already registered the handler
handler = SentryHandler('http://13d06dad246d4fe6a180ef9b15151a13:eb46a6d724df4327a8cc04d9d3cfad37@sentry.bandtastic.pagekite.me/1')
logger.addHandler(handler)
# Add StreamHandler to sentry's default so you can catch missed exceptions
logger = logging.getLogger('sentry.errors')
logger.propagate = False
logger.addHandler(logging.StreamHandler())


from raven.conf import setup_logging
setup_logging(handler)

在我的观点中,我可以使用简单的

import logging
logger = logging.getLogger(__name__)
def home(request,context={},template_name=None):
    logger.info(str(request), exc_info=True)
    return render_to_response(template_name,context, context_instance=RequestContext(request))

我尝试了很多设置。