In our project raven costs many time for create and send message to Sentry. We checked out many time costs for create data about frames, but we don't need data about all frames often. Is it possible and how create data about not all frames just about last 2-3 frames before frame with exception or error and send it into sentry by raven. Or may be possible create dependency full stack / partly stack on message level? i.e. in critical or exception or error level send full stack and in debug or warning levels just part of frames.
Asked
Active
Viewed 133 times
1 Answers
0
Use this handler for 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

warvariuc
- 57,116
- 41
- 173
- 227