我正在使用带有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答案 0 :(得分:0)
我的设置与您几乎完全相同,效果很好。我有什么不同:
答案 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 设置将控制输出的内容。