Skip to content

Commit 47b1645

Browse files
committed
before_send_log, compat tests
1 parent e3d693c commit 47b1645

File tree

4 files changed

+68
-10
lines changed

4 files changed

+68
-10
lines changed

sentry_sdk/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
)
3838
from sentry_sdk.integrations import _DEFAULT_INTEGRATIONS, setup_integrations
3939
from sentry_sdk.integrations.dedupe import DedupeIntegration
40-
from sentry_sdk.logger import has_logs_enabled
40+
from sentry_sdk.logger import has_logs_enabled, get_before_send_log
4141
from sentry_sdk.sessions import SessionFlusher
4242
from sentry_sdk.envelope import Envelope
4343
from sentry_sdk.profiler.continuous_profiler import setup_continuous_profiler
@@ -955,7 +955,7 @@ def _capture_experimental_log(self, log):
955955
f'[Sentry Logs] [{log.get("severity_text")}] {log.get("body")}'
956956
)
957957

958-
before_send_log = self.options["_experiments"].get("before_send_log")
958+
before_send_log = get_before_send_log(self.options)
959959
if before_send_log is not None:
960960
log = before_send_log(log, {})
961961
if log is None:

sentry_sdk/consts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,7 @@ def __init__(
799799
add_full_stack=DEFAULT_ADD_FULL_STACK, # type: bool
800800
max_stack_frames=DEFAULT_MAX_STACK_FRAMES, # type: Optional[int]
801801
enable_logs=False, # type: bool
802+
before_send_log=None, # type: Optional[Callable[[Log, Hint], Optional[Log]]]
802803
):
803804
# type: (...) -> None
804805
"""Initialize the Sentry SDK with the given parameters. All parameters described here can be used in a call to `sentry_sdk.init()`.

sentry_sdk/logger.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# NOTE: this is the logger sentry exposes to users, not some generic logger.
22
import functools
33
import time
4-
from typing import Any, Optional
4+
from typing import Any, Callable, Optional
55

66
from sentry_sdk import get_client
77
from sentry_sdk.utils import safe_repr
8+
from sentry_sdk.types import Log, Hint
89

910
OTEL_RANGES = [
1011
# ((severity level range), severity text)
@@ -92,3 +93,13 @@ def has_logs_enabled(options):
9293
options.get("enable_logs", False)
9394
or options["_experiments"].get("enable_logs", False)
9495
)
96+
97+
98+
def get_before_send_log(options):
99+
# type: (Optional[dict[str, Any]]) -> Optional[Callable[[Log, Hint], Optional[Log]]]
100+
if options is None:
101+
return None
102+
103+
return options.get("before_send_log") or options["_experiments"].get(
104+
"before_send_log"
105+
)

tests/test_logs.py

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,29 @@ def test_logs_basics(sentry_init, capture_envelopes):
111111
assert logs[5].get("severity_number") == 21
112112

113113

114+
@minimum_python_37
115+
def test_logs_experimental_option_still_works(sentry_init, capture_envelopes):
116+
sentry_init(_experiments={"enable_logs": True})
117+
envelopes = capture_envelopes()
118+
119+
sentry_sdk.logger.error("This is an error log...")
120+
121+
get_client().flush()
122+
123+
logs = envelopes_to_logs(envelopes)
124+
assert len(logs) == 1
125+
126+
assert logs[0].get("severity_text") == "error"
127+
assert logs[0].get("severity_number") == 17
128+
129+
114130
@minimum_python_37
115131
def test_logs_before_send_log(sentry_init, capture_envelopes):
116-
before_log_called = [False]
132+
before_log_called = False
117133

118134
def _before_log(record, hint):
135+
nonlocal before_log_called
136+
119137
assert set(record.keys()) == {
120138
"severity_text",
121139
"severity_number",
@@ -128,15 +146,13 @@ def _before_log(record, hint):
128146
if record["severity_text"] in ["fatal", "error"]:
129147
return None
130148

131-
before_log_called[0] = True
149+
before_log_called = True
132150

133151
return record
134152

135153
sentry_init(
136-
_experiments={
137-
"enable_logs": True,
138-
"before_send_log": _before_log,
139-
}
154+
enable_logs=True,
155+
before_send_log=_before_log,
140156
)
141157
envelopes = capture_envelopes()
142158

@@ -155,7 +171,37 @@ def _before_log(record, hint):
155171
assert logs[1]["severity_text"] == "debug"
156172
assert logs[2]["severity_text"] == "info"
157173
assert logs[3]["severity_text"] == "warn"
158-
assert before_log_called[0]
174+
assert before_log_called is True
175+
176+
177+
@minimum_python_37
178+
def test_logs_before_send_log_experimental_option_still_works(
179+
sentry_init, capture_envelopes
180+
):
181+
before_log_called = False
182+
183+
def _before_log(record, hint):
184+
nonlocal before_log_called
185+
before_log_called = True
186+
187+
return record
188+
189+
sentry_init(
190+
enable_logs=True,
191+
_experiments={
192+
"before_send_log": _before_log,
193+
},
194+
)
195+
envelopes = capture_envelopes()
196+
197+
sentry_sdk.logger.error("This is an error log...")
198+
199+
get_client().flush()
200+
logs = envelopes_to_logs(envelopes)
201+
assert len(logs) == 1
202+
203+
assert logs[0]["severity_text"] == "error"
204+
assert before_log_called is True
159205

160206

161207
@minimum_python_37

0 commit comments

Comments
 (0)