Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 蟒蛇乌鸦。发送部分帧_Python_Logging_Sentry_Raven - Fatal编程技术网

Python 蟒蛇乌鸦。发送部分帧

Python 蟒蛇乌鸦。发送部分帧,python,logging,sentry,raven,Python,Logging,Sentry,Raven,在我们的项目中,raven花费了很多时间来创建和发送消息给Sentry。我们检查了创建关于帧的数据的许多时间开销,但我们并不经常需要关于所有帧的数据。是否有可能,以及如何创建关于并非所有帧的数据,仅在帧之前的最后2-3帧(异常或错误),并通过raven将其发送到sentry。或者可以在消息级别创建依赖项完整堆栈/部分堆栈?i、 e.在关键或异常或错误级别发送完整堆栈,在调试或警告级别发送部分帧。将此处理程序用于Django: from raven.contrib.django.handlers

在我们的项目中,raven花费了很多时间来创建和发送消息给Sentry。我们检查了创建关于帧的数据的许多时间开销,但我们并不经常需要关于所有帧的数据。是否有可能,以及如何创建关于并非所有帧的数据,仅在帧之前的最后2-3帧(异常或错误),并通过raven将其发送到sentry。或者可以在消息级别创建依赖项完整堆栈/部分堆栈?i、 e.在关键或异常或错误级别发送完整堆栈,在调试或警告级别发送部分帧。

将此处理程序用于Django:

from raven.contrib.django.handlers import SentryHandler as BaseSentryHandler
from raven.utils.stacks import iter_stack_frames


class SentryHandler(BaseSentryHandler):

    def emit(self, record):
        if not getattr(record, 'stack', None):
            record.stack = self._get_stack(record)

        return super(SentryHandler, self).emit(record)

    def _get_targetted_stack(self, stack):
        return stack

    def _get_stack(self, record):
        """Remove non-interesting parts of the stack.
        """
        stack = iter_stack_frames()

        frames = []

        for item in stack:
            if isinstance(item, (list, tuple)):
                frame, lineno = item
            else:
                frame, lineno = item, item.f_lineno

            frames.append((frame, lineno))

        # remove parts after the `logging` module was entered
        for frame_no in reversed(xrange(len(frames))):
            frame, line_no = frames[frame_no]
            module_name = getattr(frame, 'f_globals', {}).get('__name__', '')
            if module_name.startswith('logging'):
                del frames[:frame_no + 1]
                break
        else:
            # the entry point to `logging` module was not found
            return frames

        return frames