feat: logging now uses breadcrumbs like rust sdk · tinylambda/sentry-python@a67cddb · GitHub
Skip to content

Commit a67cddb

Browse files
committed
feat: logging now uses breadcrumbs like rust sdk
1 parent 09fe647 commit a67cddb

4 files changed

Lines changed: 36 additions & 10 deletions

File tree

sentry_sdk/hub.py

Lines changed: 3 additions & 3 deletions

sentry_sdk/integrations/logging.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import logging
55

6-
from sentry_sdk import get_current_hub, capture_event
6+
from sentry_sdk import get_current_hub, capture_event, add_breadcrumb
77
from sentry_sdk.utils import to_string, create_event, exceptions_from_error_tuple, skip_internal_frames
88

99
class SentryHandler(logging.Handler, object):
@@ -17,7 +17,20 @@ def emit(self, record):
1717
def can_record(self, record):
1818
return not record.name.startswith('sentry_sdk')
1919

20+
def _breadcrumb_from_record(self, record):
21+
return {
22+
'ty': 'log',
23+
'level': self._logging_to_event_level(record.levelname),
24+
'category': record.name,
25+
'message': record.message
26+
}
27+
2028
def _emit(self, record):
29+
add_breadcrumb(self._breadcrumb_from_record(record))
30+
31+
if not self._should_create_event(record):
32+
return
33+
2134
if not self.can_record(record):
2235
print(to_string(record.message), file=sys.stderr)
2336
return
@@ -32,7 +45,7 @@ def _emit(self, record):
3245
get_current_hub().client.options['with_locals']
3346
)
3447

35-
event['level'] = record.levelname.lower()
48+
event['level'] = self._logging_to_event_level(record.levelname)
3649
event['logger'] = record.name
3750

3851
event['logentry'] = {
@@ -42,5 +55,16 @@ def _emit(self, record):
4255

4356
capture_event(event)
4457

58+
def _logging_to_event_level(self, levelname):
59+
return {
60+
'critical': 'fatal'
61+
}.get(levelname.lower(), levelname.lower())
62+
63+
def _should_create_event(self, record):
64+
# TODO: make configurable
65+
if record.levelno in (logging.ERROR, logging.CRITICAL):
66+
return True
67+
return False
68+
4569

4670
HANDLER = SentryHandler()

tests/integrations/conftest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import pytest
22
import sentry_sdk
3+
from sentry_sdk.consts import DEFAULT_OPTIONS
34
from sentry_sdk.client import Client, Transport
45

56
class TestClient(Client):
67
def __init__(self):
78
pass
89

910
dsn = 'LOL'
10-
options = {'with_locals': False, 'release': 'fake_release', 'environment': 'fake_environment', 'server_name': 'fake_servername'}
11+
options = dict(DEFAULT_OPTIONS)
1112
_transport = None
1213

1314

tests/integrations/logging/test_logging.py

Lines changed: 5 additions & 4 deletions

0 commit comments

Comments
 (0)