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

gri*_*rmo 7 django logging sentry raven

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

raven test http://jsifslkdjfklsdfjklsdjfklMYCODE 
Run Code Online (Sandbox Code Playgroud)

工作,测试显示在界面中.

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

我知道我必须加入我的 INSTALLED_APPS

'sentry','raven.contrib.django',

而且我还补充道

SENTRY_DNS = 'http://jsifslkdjfklsdfjklsdjfklMYCODE'
Run Code Online (Sandbox Code Playgroud)

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

from raven.contrib.django.models import client
client.captureException()
Run Code Online (Sandbox Code Playgroud)

我试过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,
        },
    },
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我补充说:

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))
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*kyA 8

你的"乌鸦"记录器实际上并没有使用哨兵处理程序,只是写入"控制台".有同样的问题.乌鸦/哨兵的文件缺乏一个好的作家.

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

'raven': {
            'level': 'DEBUG',
            'handlers': ['console', 'sentry'],
            'propagate': False,
         },
Run Code Online (Sandbox Code Playgroud)

并确保将其用作记录器:

logger = logging.getLogger('raven')
Run Code Online (Sandbox Code Playgroud)

  • 'raven'记录器指的是乌鸦包,我认为它被放在那里,因此乌鸦内部错误不会被送回乌鸦,导致无限循环.您应该创建自己的记录器'myapp',它在settings.py LOGGING中有自己的条目. (7认同)

Gui*_*eba 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)
Run Code Online (Sandbox Code Playgroud)

在我看来,我可以使用一个简单的

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))
Run Code Online (Sandbox Code Playgroud)

我尝试了很多设置。