8000 feat: Record extra for logging errors and breadcrumbs · etherscan-io/sentry-python@74409dd · GitHub
[go: up one dir, main page]

Skip to content

Commit 74409dd

Browse files
committed
feat: Record extra for logging errors and breadcrumbs
Fix getsentry#113
1 parent 82289f5 commit 74409dd

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

sentry_sdk/integrations/logging.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,52 @@ def _breadcrumb_from_record(record):
7777
"category": record.name,
7878
"message": record.message,
7979
"timestamp": datetime.datetime.fromtimestamp(record.created),
80+
"data": _extra_from_record(record),
8081
}
8182

8283

8384
def _logging_to_event_level(levelname):
8485
return {"critical": "fatal"}.get(levelname.lower(), levelname.lower())
8586

8687

88+
COMMON_RECORD_ATTRS = frozenset(
89+
(
90+
"args",
91+
"created",
92+
"data",
93+
"exc_info",
94+
"exc_text",
95+
"filename",
96+
"funcName",
97+
"levelname",
98+
"levelno",
99+
"linenno",
100+
"lineno",
101+
"message",
102+
"module",
103+
"msecs",
104+
"msg",
105+
"name",
106+
"pathname",
107+
"process",
108+
"processName",
109+
"relativeCreated",
110+
"stack",
111+
"tags",
112+
"thread",
113+
"threadName",
114+
)
115+
)
116+
117+
118+
def _extra_from_record(record):
119+
return {
120+
k: v
121+
for k, v in vars(record).items()
122+
if k not in COMMON_RECORD_ATTRS and not k.startswith("_")
123+
}
124+
125+
87126
class EventHandler(logging.Handler, object):
88127
def emit(self, record):
89128
with capture_internal_exceptions():
@@ -113,6 +152,7 @@ def _emit(self, record):
113152
event["level"] = _logging_to_event_level(record.levelname)
114153
event["logger"] = record.name
115154
event["logentry"] = {"message": to_string(record.msg), "params": record.args}
155+
event["extra"] = _extra_from_record(record)
116156

117157
hub.capture_event(event, hint=hint)
118158

tests/integrations/logging/test_logging.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,20 @@ def test_logging_defaults(integrations, sentry_init, capture_events):
3636
assert event["level"] == "fatal"
3737
assert any(crumb["message"] == "bread" for crumb in event["breadcrumbs"])
3838
assert not any(crumb["message"] == "LOL" for crumb in event["breadcrumbs"])
39+
40+
41+
def test_logging_extra_data(sentry_init, capture_events):
42+
sentry_init(integrations=[LoggingIntegration()], default_integrations=False)
43+
events = capture_events()
44+
45+
logger.info("bread", extra=dict(foo=42))
46+
logger.critical("lol", extra=dict(bar=69))
< 6352 code>47+
48+
event, = events
49+
50+
assert event["level"] == "fatal"
51+
assert event["extra"] == {"bar": 69}
52+
assert any(
53+
crumb["message"] == "bread" and crumb["data"] == {"foo": 42}
54+
for crumb in event["breadcrumbs"]
55+
)

0 commit comments

Comments
 (0)
0