本文整理汇总了Python中raven.utils.stacks.iter_stack_frames函数的典型用法代码示例。如果您正苦于以下问题:Python iter_stack_frames函数的具体用法?Python iter_stack_frames怎么用?Python iter_stack_frames使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了iter_stack_frames函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: _emit
def _emit(self, record, **kwargs):
data = {}
for k, v in record.__dict__.iteritems():
if '.' not in k and k not in ('culprit',):
continue
data[k] = v
stack = getattr(record, 'stack', None)
if stack is True:
stack = iter_stack_frames()
if stack:
frames = []
started = False
last_mod = ''
for frame in iter_stack_frames():
if not started:
f_globals = getattr(frame, 'f_globals', {})
module_name = f_globals.get('__name__', '')
if last_mod.startswith('logging') and not module_name.startswith('logging'):
started = True
else:
last_mod = module_name
continue
frames.append(frame)
stack = frames
extra = getattr(record, 'data', {})
# Add in all of the data from the record that we aren't already capturing
for k in record.__dict__.keys():
if k in ('stack', 'name', 'args', 'msg', 'levelno', 'exc_text', 'exc_info', 'data', 'created', 'levelname', 'msecs', 'relativeCreated'):
continue
extra[k] = record.__dict__[k]
date = datetime.datetime.utcfromtimestamp(record.created)
# If there's no exception being processed, exc_info may be a 3-tuple of None
# http://docs.python.org/library/sys.html#sys.exc_info
if record.exc_info and all(record.exc_info):
handler = self.client.get_handler('raven.events.Exception')
data.update(handler.capture(exc_info=record.exc_info))
data['checksum'] = handler.get_hash(data)
data['level'] = record.levelno
data['logger'] = record.name
return self.client.capture('Message', message=record.msg, params=record.args,
stack=stack, data=data, extra=extra,
date=date, **kwargs)
开发者ID:Ender27182818,项目名称:raven,代码行数:51,代码来源:logging.py
示例2: _add_exception_info
def _add_exception_info(self, data, record):
"""Adds sentry interfaces Exception and Stacktrace.
See
http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html
for more information on Sentry interfaces."""
type_, value, tb = record.exc_info
data[SENTRY_INTERFACES_EXCEPTION] = {"type": str(type_),
"value": str(value),
"module": record.module
}
stack = inspect.getinnerframes(tb)
# This next python statement copied pretty much verbatim from
# raven-python (https://github.com/getsentry/raven-python).
#
# raven-python is:
#
# Copyright (c) 2009 David Cramer and individual contributors.
# All rights reserved.
frames = varmap(
lambda k, v: shorten(
v,
string_length=self.string_max_length,
list_length=self.list_max_length),
get_stack_info(iter_stack_frames(stack)))
# end of copied code
data['sentry.interfaces.Stacktrace'] = {
'frames': frames }
return data
开发者ID:ronaldevers,项目名称:snitch,代码行数:34,代码来源:log2json.py
示例3: emit
def emit(self, record):
if record.levelno <= logging.ERROR and self.can_record(record):
request = None
exc_info = None
for frame_info in getouterframes(currentframe()):
frame = frame_info[0]
if not request:
request = frame.f_locals.get('request', None)
if not request:
view = frame.f_locals.get('self', None)
try:
request = getattr(view, 'request', None)
except RuntimeError:
request = None
if not exc_info:
exc_info = frame.f_locals.get('exc_info', None)
if not hasattr(exc_info, '__getitem__'):
exc_info = None
if request and exc_info:
break
if exc_info:
record.exc_info = exc_info
record.stack = \
iter_stack_frames(getinnerframes(exc_info[2]))
if request:
try:
body_pos = request.stdin.tell()
request.stdin.seek(0)
body = request.stdin.read()
request.stdin.seek(body_pos)
http = dict(headers=request.environ,
url=request.getURL(),
method=request.method,
host=request.environ.get('REMOTE_ADDR',
''), data=body)
if 'HTTP_USER_AGENT' in http['headers']:
if 'User-Agent' not in http['headers']:
http['headers']['User-Agent'] = \
http['headers']['HTTP_USER_AGENT']
if 'QUERY_STRING' in http['headers']:
http['query_string'] = http['headers']['QUERY_STRING']
setattr(record, 'request', http)
user = request.get('AUTHENTICATED_USER', None)
if user is not None and user != nobody:
user_dict = {
'id': user.getId(),
'email': user.getProperty('email') or '',
}
else:
user_dict = {}
setattr(record, 'user', user_dict)
except (AttributeError, KeyError):
logger.warning('Could not extract data from request', exc_info=True)
return super(ZopeSentryHandler, self).emit(record)
开发者ID:CGenie,项目名称:raven-python,代码行数:55,代码来源:__init__.py
示例4: _emit
def _emit(self, record, **kwargs):
data, extra = extract_extra(record)
stack = getattr(record, 'stack', None)
if stack is True:
stack = iter_stack_frames()
if stack:
stack = self._get_targetted_stack(stack, record)
date = datetime.datetime.utcfromtimestamp(record.created)
event_type = 'raven.events.Message'
handler_kwargs = {
'params': record.args,
}
try:
handler_kwargs['message'] = text_type(record.msg)
except UnicodeDecodeError:
# Handle binary strings where it should be unicode...
handler_kwargs['message'] = repr(record.msg)[1:-1]
try:
handler_kwargs['formatted'] = text_type(record.message)
except UnicodeDecodeError:
# Handle binary strings where it should be unicode...
handler_kwargs['formatted'] = repr(record.message)[1:-1]
# If there's no exception being processed, exc_info may be a 3-tuple of None
# http://docs.python.org/library/sys.html#sys.exc_info
if record.exc_info and all(record.exc_info):
# capture the standard message first so that we ensure
# the event is recorded as an exception, in addition to having our
# message interface attached
handler = self.client.get_handler(event_type)
data.update(handler.capture(**handler_kwargs))
event_type = 'raven.events.Exception'
handler_kwargs = {'exc_info': record.exc_info}
data['level'] = record.levelno
data['logger'] = record.name
kwargs['tags'] = tags = {}
if self.tags:
tags.update(self.tags)
tags.update(getattr(record, 'tags', {}))
kwargs.update(handler_kwargs)
sample_rate = extra.pop('sample_rate', None)
return self.client.capture(
event_type, stack=stack, data=data,
extra=extra, date=date, sample_rate=sample_rate,
**kwargs)
开发者ID:getsentry,项目名称:raven-python,代码行数:54,代码来源:logging.py
示例5: test_explicit_stack
def test_explicit_stack(self):
self.logger.info('This is a test of stacks', extra={'stack': iter_stack_frames()})
self.assertEquals(len(self.client.events), 1)
event = self.client.events.pop(0)
self.assertEquals(event['culprit'], 'tests.handlers.logging.tests.test_explicit_stack')
self.assertEquals(event['message'], 'This is a test of stacks')
self.assertFalse('sentry.interfaces.Exception' in event)
self.assertTrue('sentry.interfaces.Message' in event)
msg = event['sentry.interfaces.Message']
self.assertEquals(msg['message'], 'This is a test of stacks')
self.assertEquals(msg['params'], ())
self.assertTrue('sentry.interfaces.Stacktrace' in event)
开发者ID:Ender27182818,项目名称:raven,代码行数:12,代码来源:tests.py
示例6: test_stack_explicit_frames
def test_stack_explicit_frames(self):
frames = inspect.stack()
self.client.create_from_text('test', stack=iter_stack_frames(frames))
self.assertEquals(len(self.client.events), 1)
event = self.client.events.pop(0)
self.assertEquals(event['message'], 'test')
data = event['data']['__sentry__']
self.assertTrue('frames' in data)
self.assertEquals(len(frames), len(data['frames']))
for frame, frame_i in zip(frames, data['frames']):
self.assertEquals(frame[0].f_code.co_filename, frame_i['filename'])
self.assertEquals(frame[0].f_code.co_name, frame_i['function'])
开发者ID:ncfcmark,项目名称:raven-python,代码行数:14,代码来源:tests.py
示例7: test_explicit_stack
def test_explicit_stack(self):
record = self.make_record('This is a test of stacks', extra={'stack': iter_stack_frames()})
self.handler.emit(record)
self.assertEqual(len(self.client.events), 1)
event = self.client.events.pop(0)
assert 'stacktrace' in event
self.assertTrue('message' in event, event)
self.assertEqual(event['message'], 'This is a test of stacks')
assert 'exception' not in event
self.assertTrue('sentry.interfaces.Message' in event)
msg = event['sentry.interfaces.Message']
self.assertEqual(msg['message'], 'This is a test of stacks')
self.assertEqual(msg['params'], ())
开发者ID:ehfeng,项目名称:raven-python,代码行数:14,代码来源:tests.py
示例8: test_explicit_stack
def test_explicit_stack(self):
self.logger.info("This is a test of stacks", extra={"stack": iter_stack_frames()})
self.assertEquals(len(self.client.events), 1)
event = self.client.events.pop(0)
self.assertTrue("culprit" in event, event)
self.assertEquals(event["culprit"], "tests.handlers.logging.tests.test_explicit_stack")
self.assertTrue("message" in event, event)
self.assertEquals(event["message"], "This is a test of stacks")
self.assertFalse("sentry.interfaces.Exception" in event)
self.assertTrue("sentry.interfaces.Message" in event)
msg = event["sentry.interfaces.Message"]
self.assertEquals(msg["message"], "This is a test of stacks")
self.assertEquals(msg["params"], ())
self.assertTrue("sentry.interfaces.Stacktrace" in event)
开发者ID:rmoorman,项目名称:raven-python,代码行数:14,代码来源:tests.py
示例9: test_stack_explicit_frames
def test_stack_explicit_frames(self):
def bar():
return inspect.stack()
frames = bar()
self.client.captureMessage('test', stack=iter_stack_frames(frames))
self.assertEquals(len(self.client.events), 1)
event = self.client.events.pop(0)
self.assertEquals(event['message'], 'test')
assert 'stacktrace' in event
self.assertEquals(len(frames), len(event['stacktrace']['frames']))
for frame, frame_i in zip(frames, event['stacktrace']['frames']):
self.assertEquals(frame[0].f_code.co_filename, frame_i['abs_path'])
self.assertEquals(frame[0].f_code.co_name, frame_i['function'])
开发者ID:DramaFever,项目名称:raven-python,代码行数:16,代码来源:tests.py
示例10: test_stack_explicit_frames
def test_stack_explicit_frames(self):
def bar():
return inspect.stack()
frames = bar()
self.client.captureMessage("test", stack=iter_stack_frames(frames))
self.assertEquals(len(self.client.events), 1)
event = self.client.events.pop(0)
self.assertEquals(event["message"], "test")
self.assertTrue("sentry.interfaces.Stacktrace" in event)
self.assertEquals(len(frames), len(event["sentry.interfaces.Stacktrace"]["frames"]))
for frame, frame_i in zip(frames, event["sentry.interfaces.Stacktrace"]["frames"]):
self.assertEquals(frame[0].f_code.co_filename, frame_i["abs_path"])
self.assertEquals(frame[0].f_code.co_name, frame_i["function"])
开发者ID:jraman,项目名称:raven-python,代码行数:16,代码来源:tests.py
示例11: _add_exception_info
def _add_exception_info(self, data, record):
"""Adds sentry interfaces Exception and Stacktrace.
See
http://sentry.readthedocs.org/en/latest/developer/interfaces/index.html
for more information on Sentry interfaces."""
type_, value, _ = record.exc_info
data[SENTRY_INTERFACES_EXCEPTION] = {"type": str(type_),
"value": str(value),
"module": record.module
}
# This next python statement copied pretty much verbatim from
# raven-python (https://github.com/getsentry/raven-python).
#
# raven-python is:
#
# Copyright (c) 2009 David Cramer and individual contributors.
# All rights reserved.
frames = varmap(
lambda k, v: shorten(
v,
string_length=self.string_max_length,
list_length=self.list_max_length),
get_stack_info(iter_stack_frames()))
# end of copied code
# filter out unwanted frames..
# don't know how to do this earlier, so we just do a
# post-processing step and filter out unwanted frames
frames = [frame for frame in frames
if frame['module'] not in self.EXCLUDE_MODULES]
data['sentry.interfaces.Stacktrace'] = {
'frames': frames }
return data
开发者ID:jakm,项目名称:snitch,代码行数:37,代码来源:log2json.py
示例12: build_msg
def build_msg(
self,
event_type,
data=None,
date=None,
time_spent=None,
extra=None,
stack=None,
public_key=None,
tags=None,
fingerprint=None,
**kwargs
):
"""
Captures, processes and serializes an event into a dict object
The result of ``build_msg`` should be a standardized dict, with
all default values available.
"""
# create ID client-side so that it can be passed to application
event_id = uuid.uuid4().hex
data = merge_dicts(self.context.data, data)
data.setdefault("tags", {})
data.setdefault("extra", {})
if "." not in event_type:
# Assume it's a builtin
event_type = "raven.events.%s" % event_type
handler = self.get_handler(event_type)
result = handler.capture(**kwargs)
# data (explicit) culprit takes over auto event detection
culprit = result.pop("culprit", None)
if data.get("culprit"):
culprit = data["culprit"]
for k, v in six.iteritems(result):
if k not in data:
data[k] = v
# auto_log_stacks only applies to events that are not exceptions
# due to confusion about which stack is which and the automatic
# application of stacktrace to exception objects by Sentry
if stack is None and "exception" not in data:
stack = self.auto_log_stacks
if stack and "stacktrace" not in data:
if stack is True:
frames = iter_stack_frames()
else:
frames = stack
stack_info = get_stack_info(frames, transformer=self.transform, capture_locals=self.capture_locals)
data.update({"stacktrace": stack_info})
if self.include_paths:
for frame in self._iter_frames(data):
if frame.get("in_app") is not None:
continue
path = frame.get("module")
if not path:
continue
if path.startswith("raven."):
frame["in_app"] = False
else:
frame["in_app"] = any(path.startswith(x) for x in self.include_paths) and not any(
path.startswith(x) for x in self.exclude_paths
)
if not culprit:
if "stacktrace" in data:
culprit = get_culprit(data["stacktrace"]["frames"])
elif "exception" in data:
stacktrace = data["exception"]["values"][0].get("stacktrace")
if stacktrace:
culprit = get_culprit(stacktrace["frames"])
if not data.get("level"):
data["level"] = kwargs.get("level") or logging.ERROR
if not data.get("server_name"):
data["server_name"] = self.name
if not data.get("modules"):
data["modules"] = self.get_module_versions()
if self.release is not None:
data["release"] = self.release
data["tags"] = merge_dicts(self.tags, data["tags"], tags)
data["extra"] = merge_dicts(self.extra, data["extra"], extra)
# Legacy support for site attribute
#.........这里部分代码省略.........
开发者ID:HPotter,项目名称:raven-python,代码行数:101,代码来源:base.py
示例13: build_msg
def build_msg(self, event_type, data=None, date=None,
time_spent=None, extra=None, stack=None, public_key=None,
tags=None, **kwargs):
"""
Captures, processes and serializes an event into a dict object
The result of ``build_msg`` should be a standardized dict, with
all default values available.
"""
# create ID client-side so that it can be passed to application
event_id = uuid.uuid4().hex
if data is None:
data = {}
if extra is None:
extra = {}
if not date:
date = datetime.datetime.utcnow()
if stack is None:
stack = self.auto_log_stacks
if '.' not in event_type:
# Assume it's a builtin
event_type = 'raven.events.%s' % event_type
handler = self.get_handler(event_type)
result = handler.capture(**kwargs)
# data (explicit) culprit takes over auto event detection
culprit = result.pop('culprit', None)
if data.get('culprit'):
culprit = data['culprit']
for k, v in result.iteritems():
if k not in data:
data[k] = v
if stack and 'sentry.interfaces.Stacktrace' not in data:
if stack is True:
frames = iter_stack_frames()
else:
frames = stack
data.update({
'sentry.interfaces.Stacktrace': {
'frames': get_stack_info(frames,
list_max_length=self.list_max_length,
string_max_length=self.string_max_length)
},
})
if 'sentry.interfaces.Stacktrace' in data:
if self.include_paths:
for frame in data['sentry.interfaces.Stacktrace']['frames']:
if frame.get('in_app') is not None:
continue
path = frame.get('module')
if not path:
continue
if path.startswith('raven.'):
frame['in_app'] = False
else:
frame['in_app'] = (any(path.startswith(x)
for x in self.include_paths)
and not any(path.startswith(x)
for x in self.exclude_paths))
if not culprit:
culprit = get_culprit(data['sentry.interfaces.Stacktrace']['frames'])
if not data.get('level'):
data['level'] = kwargs.get('level') or logging.ERROR
if not data.get('server_name'):
data['server_name'] = self.name
if not data.get('modules'):
data['modules'] = self.get_module_versions()
data['tags'] = tags or {}
data.setdefault('extra', {})
data.setdefault('level', logging.ERROR)
# Add extra context
if self.extra:
for k, v in self.extra.iteritems():
data['extra'].setdefault(k, v)
for k, v in extra.iteritems():
data['extra'][k] = v
if culprit:
data['culprit'] = culprit
if not data.get('checksum'):
checksum_bits = handler.get_hash(data)
#.........这里部分代码省略.........
开发者ID:Archaeopteryx,项目名称:elmo,代码行数:101,代码来源:base.py
示例14: build_msg
def build_msg(
self, event_type, data=None, date=None, time_spent=None, extra=None, stack=None, public_key=None, **kwargs
):
"""
Captures, processes and serializes an event into a dict object
"""
# create ID client-side so that it can be passed to application
event_id = uuid.uuid4().hex
if data is None:
data = {}
if extra is None:
extra = {}
if not date:
date = datetime.datetime.utcnow()
if stack is None:
stack = self.auto_log_stacks
if "." not in event_type:
# Assume it's a builtin
event_type = "raven.events.%s" % event_type
handler = self.get_handler(event_type)
result = handler.capture(**kwargs)
# data (explicit) culprit takes over auto event detection
culprit = result.pop("culprit", None)
if data.get("culprit"):
culprit = data["culprit"]
for k, v in result.iteritems():
if k not in data:
data[k] = v
if stack and "sentry.interfaces.Stacktrace" not in data:
if stack is True:
frames = iter_stack_frames()
else:
frames = stack
data.update(
{
"sentry.interfaces.Stacktrace": {
"frames": varmap(
lambda k, v: shorten(
v, string_length=self.string_max_length, list_length=self.list_max_length
),
get_stack_info(frames),
)
}
}
)
if "sentry.interfaces.Stacktrace" in data and not culprit:
culprit = get_culprit(
data["sentry.interfaces.Stacktrace"]["frames"], self.include_paths, self.exclude_paths
)
if not data.get("level"):
data["level"] = logging.ERROR
data["modules"] = get_versions(self.include_paths)
data["server_name"] = self.name
data.setdefault("extra", {})
data.setdefault("level", logging.ERROR)
# Shorten lists/strings
for k, v in extra.iteritems():
data["extra"][k] = shorten(v, string_length=self.string_max_length, list_length=self.list_max_length)
if culprit:
data["culprit"] = culprit
if "checksum" not in data:
checksum_bits = handler.get_hash(data)
else:
checksum_bits = data["checksum"]
if isinstance(checksum_bits, (list, tuple)):
checksum = hashlib.md5()
for bit in checksum_bits:
checksum.update(to_string(bit))
checksum = checksum.hexdigest()
else:
checksum = checksum_bits
data["checksum"] = checksum
# Run the data through processors
for processor in self.get_processors():
data.update(processor.process(data))
# Make sure all data is coerced
data = transform(data)
if "message" not in data:
data["message"] = handler.to_string(data)
data.update({"timestamp": date, "time_spent": time_spent, "event_id": event_id})
#.........这里部分代码省略.........
开发者ID:moefang,项目名称:nacelle,代码行数:101,代码来源:base.py
示例15: emit
def emit(self, record):
if record.levelno <= logging.ERROR:
request = None
exc_info = None
for frame_info in getouterframes(currentframe()):
frame = frame_info[0]
if not request:
request = frame.f_locals.get('request', None)
if not request:
view = frame.f_locals.get('self', None)
request = getattr(view, 'request', None)
if not exc_info:
exc_info = frame.f_locals.get('exc_info', None)
if not hasattr(exc_info, '__getitem__'):
exc_info = None
if request and exc_info:
break
if exc_info:
record.exc_info = exc_info
record.stack = \
iter_stack_frames(getinnerframes(exc_info[2]))
if request:
try:
body_pos = request.stdin.tell()
request.stdin.seek(0)
body = request.stdin.read()
request.stdin.seek(body_pos)
http = dict(headers=request.environ,
url=request.getURL(),
method=request.get('REQUEST_METHOD', ''),
host=request.environ.get('REMOTE_ADDR',
''), data=body)
if 'HTTP_USER_AGENT' in http['headers']:
if 'User-Agent' not in http['headers']:
http['headers']['User-Agent'] = \
http['headers']['HTTP_USER_AGENT']
if 'QUERY_STRING' in http['headers']:
http['query_string'] = http['headers'
]['QUERY_STRING']
setattr(record, 'sentry.interfaces.Http', http)
user = request.get('AUTHENTICATED_USER', None)
if user is not None:
user_dict = dict(id=user.getId(),
is_authenticated=user.has_role('Authenticated'),
email=user.getProperty('email') or '',
roles=getattr(request, 'roles', ()))
else:
user_dict = {'is_authenticated': False, 'roles': getattr(request, 'roles', ())}
setattr(record, 'sentry.interfaces.User', user_dict)
except (AttributeError, KeyError):
# We don't want to go recursive
pass
error_number = SITE_ERROR_NO.findall(record.msg)
if error_number:
error_number = error_number[0][0]
else:
error_number = None
if error_number:
setattr(record, 'zope.errorid', error_number)
error_type = [line for line in CRITICAL_LINE.findall(record.msg) if 'Traceback' not in line]
if error_type:
error_type = error_type[0]
new_msg = record.msg.replace(error_number, error_type)
record.message = record.msg = new_msg
try:
e=sys.exc_info()
if e[0]:
exception_info = {"type":e[0].__name__,
"value":str(e[1]), "module":e[0].__module__}
setattr(record, 'sentry.interfaces.Exception', exception_info)
if error_number:
# This is covered by the rest of our metadata
new_msg = "%(type)s: %(value)s" % (exception_info)
record.msg = new_msg
record.message = new_msg
if e[2]:
tb_info = {"frames": []}
frames = traceback.extract_tb(e[2])
for frame in frames:
try:
# I am an evil thing
tb_module_guess = [m for m in sys.modules.keys() if m.replace(".","/") in frame[0]]
# Longest guessed module name
tb_module_guess = sorted(tb_module_guess, key=lambda x:len(x))[-1]
except:
tb_module_guess = None
tb_info["frames"].append(
{"filename":frame[0],
"lineno":frame[1],
"function":frame[2],
"context_line":frame[3],
"module":tb_module_guess,
})
setattr(record, 'sentry.interfaces.Stacktrace', tb_info)
lowest_frame = tb_info['frames'][-1]
if "/" not in lowest_frame['filename']:
culprit = "%s %s" % (lowest_frame['filename'], lowest_frame['function'])
#.........这里部分代码省略.........
开发者ID:collective,项目名称:mr.poe,代码行数:101,代码来源:__init__.py
示例16: test_logger
def test_logger(self):
client = TempStoreClient(include_paths=['tests'])
handler = SentryHandler(client)
logger = self.logger
logger.handlers = []
logger.addHandler(handler)
logger.error('This is a test error')
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['logger'], __name__)
self.assertEquals(event['level'], logging.ERROR)
self.assertEquals(event['message'], 'This is a test error')
self.assertFalse('frames' in event['data']['__sentry__'])
logger.warning('This is a test warning')
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['logger'], __name__)
self.assertEquals(event['level'], logging.WARNING)
self.assertEquals(event['message'], 'This is a test warning')
self.assertFalse('frames' in event['data']['__sentry__'])
logger.info('This is a test info with a url', extra=dict(url='http://example.com'))
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['url'], 'http://example.com')
self.assertFalse('frames' in event['data']['__sentry__'])
try:
raise ValueError('This is a test ValueError')
except ValueError:
logger.info('This is a test info with an exception', exc_info=True)
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['class_name'], 'ValueError')
self.assertEquals(event['message'], 'This is a test info with an exception')
self.assertTrue('__sentry__' in event['data'])
self.assertTrue('exception' in event['data']['__sentry__'])
self.assertTrue('frames' in event['data']['__sentry__'])
# test stacks
logger.info('This is a test of stacks', extra={'stack': True})
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['view'], 'tests.handlers.tests.test_logger')
self.assertEquals(event['message'], 'This is a test of stacks')
self.assertTrue('__sentry__' in event['data'])
self.assertTrue('frames' in event['data']['__sentry__'])
# test no stacks
logger.info('This is a test of no stacks', extra={'stack': False})
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['view'], None)
self.assertEquals(event['message'], 'This is a test of no stacks')
self.assertTrue('__sentry__' in event['data'])
self.assertFalse('frames' in event['data']['__sentry__'])
# test explicit stack
logger.info('This is a test of stacks', extra={'stack': iter_stack_frames()})
self.assertEquals(len(client.events), 1)
event = client.events.pop(0)
self.assertEquals(event['view'], 'tests.handlers.tests.test_logger')
self.assertEquals(event['message'], 'This is a test of stacks')
self.assertTrue('__sentry__' in event['data'])
self.assertTrue('frames' in event['data']['__sentry__'])
开发者ID:d1on,项目名称:raven,代码行数:71,代码来源:tests.py
示例17: build_msg
def build_msg(self, event_type, data=None, date=None,
time_spent=None, extra=None, stack=None, public_key=None,
tags=None, **kwargs):
"""
Captures, processes and serializes an event into a dict object
"""
# create ID client-side so that it can be passed to application
event_id = uuid.uuid4().hex
if data is None:
data = {}
if extra is None:
extra = {}
if not date:
date = datetime.datetime.utcnow()
if stack is None:
stack = self.auto_log_stacks
if '.' not in event_type:
# Assume it's a builtin
event_type = 'raven.events.%s' % event_type
handler = self.get_handler(event_type)
result = handler.capture(**kwargs)
# data (explicit) culprit takes over auto event detection
culprit = result.pop('culprit', None)
if data.get('culprit'):
culprit = data['culprit']
for k, v in result.iteritems():
if k not in data:
data[k] = v
if stack and 'sentry.interfaces.Stacktrace' not in data:
if stack is True:
frames = iter_stack_frames()
else:
frames = stack
data.update({
'sentry.interfaces.Stacktrace': {
'frames': varmap(lambda k, v: shorten(v,
string_length=self.string_max_length,
list_length=self.list_max_length),
get_stack_info(frames))
},
})
if 'sentry.interfaces.Stacktrace' in data and not culprit:
culprit = get_culprit(
data['sentry.interfaces.Stacktrace']['frames'],
self.include_paths, self.exclude_paths
)
if not data.get('level'):
data['level'] = kwargs.get('level') or logging.ERROR
data['modules'] = get_versions(self.include_paths)
data['server_name'] = self.name
data['tags'] = tags
data.setdefault('extra', {})
data.setdefault('level', logging.ERROR)
# Shorten lists/strings
for k, v in extra.iteritems():
data['extra'][k] = shorten(v, string_length=self.string_max_length,
list_length=self.list_max_length)
if culprit:
data['culprit'] = culprit
if 'checksum' not in data:
checksum_bits = handler.get_hash(data)
else:
checksum_bits = data['checksum']
if isinstance(checksum_bits, (list, tuple)):
checksum = hashlib.md5()
for bit in checksum_bits:
checksum.update(to_string(bit))
checksum = checksum.hexdigest()
else:
checksum = checksum_bits
data['checksum'] = checksum
# Run the data through processors
for processor in self.get_processors():
data.update(processor.process(data))
if 'message' not in data:
data['message'] = handler.to_string(data)
data.setdefault('project', self.project)
data.setdefault('site', self.site)
data.setdefault('public_key', self.public_key)
# Make sure all data is coerced
#.........这里部分代码省略.........
开发者ID:akbargumbira,项目名称:inasafe,代码行数:101,代码来源:base.py
示例18: _emit
def _emit(self, record, **kwargs):
data = {}
for k, v in record.__dict__.iteritems():
if '.' not in k and k not in ('culprit',):
continue
data[k] = v
stack = getattr(record, 'stack', None)
if stack is True:
stack = iter_stack_frames()
if stack:
# we might need to traverse this multiple times, so coerce it to a list
stack = list(stack)
frames = []
started = False
last_mod = ''
for item in stack:
if isinstance(item, (list, tuple)):
frame, lineno = item
else:
frame, lineno = item, item.f_lineno
if not started:
f_globals = getattr(frame, 'f_globals', {})
module_name = f_globals.get('__name__', '')
if (last_mod and last_mod.startswith('logging')) \
and not module_name.startswith('logging'):
started = True
else:
last_mod = module_name
continue
frames.append((frame, lineno))
# We must've not found a starting point
if not frames:
frames = stack
stack = frames
extra = getattr(record, 'data', None)
if not isinstance(extra, dict):
if extra:
extra = {'data': extra}
else:
extra = {}
# Add in all of the data from the record that we aren't already capturing
for k in record.__dict__.keys():
if k in RESERVED:
continue
if k.startswith('_'):
continue
extra[k] = record.__dict__[k]
date = datetime.datetime.utcfromtimestamp(record.created)
# If there's no exception being processed, exc_info may be a 3-tuple of None
# http://docs.python.org/library/sys.html#sys.exc_info
if record.exc_info and all(record.exc_info):
handler = self.client.get_handler('raven.events.Exception')
data.update(handler.capture(exc_info=record.exc_info))
# HACK: discover a culprit when we normally couldn't
elif not (data.get('sentry.interfaces.Stacktrace') or data.get('culprit')) and (record.name or record.funcName):
data['culprit'] = '%s.%s' % (record.name or '<unknown>', record.funcName or '<unknown>')
data['level'] = record.levelno
data['logger'] = record.name
return self.client.capture('Message', message=record.msg, params=record.args,
stack=stack, data=
|
请发表评论