在我们的项目中,raven 花费了很多时间来创建并向 Sentry 发送消息。我们检查了创建有关帧的数据的许多时间成本,但我们并不经常需要有关所有帧的数据。是否有可能以及如何在出现异常或错误的帧之前创建关于并非所有帧的数据,大约在最后 2-3 帧,然后通过 raven 将其发送到哨兵。或者可能在消息级别上创建依赖全栈/部分栈?即在关键或异常或错误级别发送完整的堆栈和在调试或警告级别只是帧的一部分。
问问题
127 次
1 回答
0
为 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
于 2014-04-18T09:13:53.053 回答