3

私はDjangoをtastypieで使用し、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'

スタックトレースの残りの部分。

これは私のプロジェクトのログ設定です:

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,
        },
    },
}

エラーをより適切にログに記録するにはどうすればよいですか?

ジャンゴ 1.4 タスティピー 0.9.11 歩哨 3.5.7

4

3 に答える 3

0

Tastypie 設定TASTYPIE_FULL_DEBUGを使用します。Sentry/Raven でTASTYPIE_FULL_DEBUGTrueに設定すると、例外がログに記録され、コアのDEBUG設定によって出力が制御されます。

于 2016-07-15T22:41:49.740 に答える
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

私はあなたとほぼ同じ設定をしており、うまく機能します。私が違うもの:

  1. Sentry 4.7.9、それかもしれません
  2. Tastypie はすでに ERROR にログを記録しており、これは Sentry ハンドラーによって処理されているためです。
  3. サーバーを DEBUG=False のままにしています。DEBUG=True を指定すると、tastypie は何もログに記録せず、応答としてエラー メッセージを出力するだけです。
于 2012-07-17T23:50:37.237 に答える