2012-07-17 117 views
3

我使用Django與tastypie和Sentry進行錯誤跟蹤。Sentry不顯示tastypie錯誤消息

問題是爲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' 

和堆棧跟蹤的其餘部分。

這是我的項目的日誌記錄配置:

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

我幾乎完全一樣的設置,在你和它的偉大工程。我有什麼不同:

  1. 哨兵4.7.9,可能是
  2. 我沒有在設置明確的tastypie記錄儀,因爲tastypie已經記錄到錯誤,這是由哨兵處理程序處理。
  3. 我保持我的服務器DEBUG = False。用DEBUG = True,tastypie不會記錄任何東西,只是吐出錯誤信息作爲迴應。
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.pyMIDDLEWARE_CLASSESmyproduct.middleware.SentryCatchMiddleware取代raven.contrib.django.raven_compat.middleware.Sentry404CatchMiddleware與下面的實現:

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) 

我很想看到,雖然一個更好的解決方案!

+0

嗯。在生產中,錯誤現在記錄兩次。所以它是真的:'DEBUG = True'意味着沒有記錄django.request.tastypie。 – ivy 2013-03-11 16:11:23

0

使用Tastypie設置TASTYPIE_FULL_DEBUG。使用Sentry/Raven如果你設置了TASTYPIE_FULL_DEBUG真的,它會記錄異常和核心調試設置將控制輸出是什麼。