Skip to content

Instantly share code, notes, and snippets.

@svetlyak40wt
Created April 24, 2013 05:24
Show Gist options
  • Save svetlyak40wt/5449822 to your computer and use it in GitHub Desktop.
Save svetlyak40wt/5449822 to your computer and use it in GitHub Desktop.
Sentry Output for twiggy.
class SentryOutput(outputs.Output):
def __init__(self, dsn, *args, **kwargs):
self.client = Client(dsn=dsn)
super(SentryOutput, self).__init__(format=λ msg: msg)
def _open(self):
pass
def _close(self):
pass
def _write(self, msg):
try:
# Avoid typical config issues by overriding loggers
# behavior
if msg.name.startswith('sentry.errors'):
print >> sys.stderr, to_string(self._bad_error_format(msg))
return
return self._actual_write(msg)
except Exception:
print >> sys.stderr, "Top level Sentry exception caught - failed creating log record"
print >> sys.stderr, to_string(msg.text)
print >> sys.stderr, to_string(traceback.format_exc())
try:
self.client.captureException()
except Exception:
pass
def _bad_error_format(self, msg):
fields = formats.line_conversion.convert(msg.fields)
text = fields + u':' + msg.text
if msg.traceback:
text += u'\n' + msg.traceback
return text
def _actual_write(self, msg):
data = {
'level': msg.level._LogLevel__name.lower(),
'logger': msg.name,
}
event_type = 'raven.events.Message'
handler_kwargs = {
'message': msg.text,
'params': msg.fields['args'],
'formatted': msg.text,
}
date = datetime.datetime.fromtimestamp(time.mktime(msg.fields['time']))
if 'tags' in msg.fields:
handler_kwargs['tags'] = msg.fields['tags']
if msg.raw_traceback is not None:
handler = self.client.get_handler(event_type)
data.update(handler.capture(**handler_kwargs))
event_type = 'raven.events.Exception'
handler_kwargs['exc_info'] = msg.raw_traceback
ignored_fields = set(['name', 'level', 'verbosity', 'args', 'time', 'tags'])
extra = dict((key, value)
for key, value in msg.fields.items()
if key not in ignored_fields)
return self.client.capture(event_type,
data=data,
extra=extra,
date=date,
**handler_kwargs
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment