Sentry不显示tastypie错误消息

时间:2012-07-17 20:26:11

标签: python django tastypie sentry

我正在使用带有tastypie的Django和用于错误跟踪的Sentry。

问题是为tastypie引发的错误没有记录错误消息。

使用以下消息记录它们:

core.api.api_user.hydrate
Internal Server Error: /api/v1/test/123/ 

并应记录下一条消息:

core.api.api_user.hydrate
int() argument must be a string or a number, not 'dict'

以及Stacktrace的其余部分。

这是我的项目日志配置:

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.request.tastypie': {
            "handlers": ["sentry"],
            "level": "ERROR",
            "propagate": False
        },
        'django.db.backends': {
            'level': 'ERROR',
            'handlers': ['console'],
            'propagate': False,
        },
        'raven': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
        'sentry.errors': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': False,
        },
    },
}

有些想法如何更好地记录我的错误?

django 1.4 Tastypie 0.9.11 哨兵3.5.7

3 个答案:

答案 0 :(得分:0)

我的设置与您几乎完全相同,效果很好。我有什么不同:

  1. Sentry 4.7.9,可能是那个
  2. 我在设置中没有明确的tastypie记录器,因为tastypie已经记录到ERROR,由哨兵处理程序处理。
  3. 我将服务器保持在DEBUG = False。使用DEBUG = True,tastypie不会记录任何内容,只会在响应中发送错误消息。

答案 1 :(得分:0)

即使在DEBUG上记录所有内容,我也看不到有这500个错误的Sentry日志。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        '': {
            'level': 'DEBUG',
            'handlers': ['console'],
        },
    }
}

因此,在settings.py MIDDLEWARE_CLASSES中,我将raven.contrib.django.raven_compat.middleware.Sentry404CatchMiddleware替换为myproduct.middleware.SentryCatchMiddleware,并使用以下实现:

from raven.contrib.django.models import client
from raven.contrib.django.middleware import Sentry404CatchMiddleware
import logging

class SentryCatchMiddleware(Sentry404CatchMiddleware):
    def process_response(self, request, response):
        if response.status_code >= 500:
            data = client.get_data_from_request(request)
            data.update({
                'level': logging.ERROR,
                'logger': 'http500',
            })
            result = client.captureMessage(message='Internal Server Error: %s' % request.build_absolute_uri(), data=data)
            request.sentry = {
                'project_id': data.get('project', client.project),
                'id': client.get_ident(result),
            }
            return response
        return super(SentryCatchMiddleware, self).process_response(request, response)

我希望看到更好的解决方案!

答案 2 :(得分:0)

使用Tastypie设置 TASTYPIE_FULL_DEBUG 。使用Sentry / Raven,如果将 TASTYPIE_FULL_DEBUG 设置为 True ,它将记录异常,核心 DEBUG 设置将控制输出的内容。