Skip to content

Instantly share code, notes, and snippets.

@b0g3r
Created July 17, 2020 19:11
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save b0g3r/2a723e267e6f1e558d049e576a1c020b to your computer and use it in GitHub Desktop.
Save b0g3r/2a723e267e6f1e558d049e576a1c020b to your computer and use it in GitHub Desktop.
import logging
from typing import (
List,
Union,
)
from sentry_sdk import add_breadcrumb
from structlog_sentry import SentryJsonProcessor
class SentryBreadcrumbJsonProcessor(SentryJsonProcessor):
def __init__(
self,
level: int = logging.WARNING,
breadcrumb_level: int = logging.INFO,
active: bool = True,
as_extra: bool = True,
tag_keys: Union[List[str], str] = None,
) -> None:
self.breadcrumb_level = breadcrumb_level
super().__init__(
level=level,
active=active,
as_extra=as_extra,
tag_keys=tag_keys,
)
def save_breadcrumb(self, logger, event_dict):
data = event_dict.copy()
data.pop('event')
data.pop('logger', None)
data.pop('level', None)
data.pop('timestamp', None)
breadcrumb = {
"ty": "log",
"level": event_dict['level'].lower(),
"category": event_dict.get('logger') or logger.name,
"message": event_dict['event'],
"data": data,
}
add_breadcrumb(breadcrumb, hint={'event_dict': event_dict})
def __call__(self, logger, method, event_dict) -> dict:
do_breadcrumb = getattr(logging, event_dict["level"].upper()) >= self.breadcrumb_level
if do_breadcrumb:
self.save_breadcrumb(logger, event_dict)
return super().__call__(logger=logger, method=method, event_dict=event_dict)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment