From 5ae6cf778476839a851450cff4d81472d8ea4ac3 Mon Sep 17 00:00:00 2001 From: Robin D'Arcy Date: Tue, 12 Mar 2024 15:08:49 +0000 Subject: [PATCH] feat: Add ignore_breadcrumb_data param, send data with breadcrumbs --- README.md | 5 +++++ structlog_sentry/__init__.py | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c1fe86e..1e70859 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,11 @@ Do not forget to add the `structlog.stdlib.add_log_level` and optionally the as events. Default is `logging.WARNING`. - `active` A flag to make this processor enabled/disabled. - `as_context` Send `event_dict` as extra info to Sentry. Default is `True`. +- `ignore_breadcrumb_data` A list of data keys that will be excluded from + [breadcrumb data](https://docs.sentry.io/platforms/python/enriching-events/breadcrumbs/#manual-breadcrumbs). + Defaults to keys which are already sent separately, i.e. `level`, `logger`, + `event` and `timestamp`. All other data in `event_dict` will be sent as + breadcrumb data. - `tag_keys` A list of keys. If any if these keys appear in `event_dict`, the key and its corresponding value in `event_dict` will be used as Sentry event tags. use `"__all__"` to report all key/value pairs of event as tags. diff --git a/structlog_sentry/__init__.py b/structlog_sentry/__init__.py index b532fe9..925ea81 100644 --- a/structlog_sentry/__init__.py +++ b/structlog_sentry/__init__.py @@ -38,6 +38,12 @@ def __init__( event_level: int = logging.WARNING, active: bool = True, as_context: bool = True, + ignore_breadcrumb_data: Iterable[str] = ( + "level", + "logger", + "event", + "timestamp", + ), tag_keys: list[str] | str | None = None, ignore_loggers: Iterable[str] | None = None, verbose: bool = False, @@ -51,6 +57,8 @@ def __init__( :param active: A flag to make this processor enabled/disabled. :param as_context: Send `event_dict` as extra info to Sentry. Default is :obj:`True`. + :param ignore_breadcrumb_data: A list of data keys that will be excluded from + breadcrumb data. Defaults to keys which are already sent separately. :param tag_keys: A list of keys. If any if these keys appear in `event_dict`, the key and its corresponding value in `event_dict` will be used as Sentry event tags. use `"__all__"` to report all key/value pairs of event as tags. @@ -68,6 +76,7 @@ def __init__( self._hub = hub self._as_context = as_context self._original_event_dict: dict = {} + self.ignore_breadcrumb_data = ignore_breadcrumb_data self._ignored_loggers: set[str] = set() if ignore_loggers is not None: @@ -131,13 +140,16 @@ def _get_event_and_hint(self, event_dict: EventDict) -> tuple[dict, dict]: return event, hint def _get_breadcrumb_and_hint(self, event_dict: EventDict) -> tuple[dict, dict]: + data = { + k: v for k, v in event_dict.items() if k not in self.ignore_breadcrumb_data + } event = { "type": "log", "level": event_dict.get("level"), # type: ignore "category": event_dict.get("logger"), "message": event_dict["event"], "timestamp": event_dict.get("timestamp"), - "data": {}, + "data": data, } return event, {"log_record": event_dict}