3

我将 Django 与美味派一起使用,并使用 Sentry 进行错误跟踪。

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

他们记录了以下消息:

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 sentry 3.5.7

4

3 回答 3

0

我的设置和你几乎一模一样,而且效果很好。我有什么不同:

  1. Sentry 4.7.9,可能是那个
  2. 我在设置中没有明确的美味记录器,因为美味派已经记录到由哨兵处理程序处理的错误。
  3. 我将我的服务器保持在 DEBUG=False 上。使用 DEBUG=True,tastepie 将不会记录任何内容,只是吐出错误消息作为响应。
于 2012-07-17T23:50:37.237 回答
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.Sentry404CatchMiddlewaremyproduct.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)

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

于 2013-03-11T15:33:26.293 回答
0

使用 Tastypie 设置TASTYPIE_FULL_DEBUG。使用 Sentry/Raven 如果您将TASTYPIE_FULL_DEBUG设置为True,它将记录异常并且核心DEBUG设置将控制输出是什么。

于 2016-07-15T22:41:49.740 回答