Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions MIGRATION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ Looking to upgrade from Sentry SDK 2.x to 3.x? Here's a comprehensive list of wh
- `MAX_PROFILE_DURATION_NS`, `PROFILE_MINIMUM_SAMPLES`, `Profile`, `Scheduler`, `ThreadScheduler`, `GeventScheduler`, `has_profiling_enabled`, `setup_profiler`, `teardown_profiler` are no longer accessible from `sentry_sdk.profiler`. They're still accessible from `sentry_sdk.profiler.transaction_profiler`.
- `DEFAULT_SAMPLING_FREQUENCY`, `MAX_STACK_DEPTH`, `get_frame_name`, `extract_frame`, `extract_stack`, `frame_id` are no longer accessible from `sentry_sdk.profiler`. They're still accessible from `sentry_sdk.profiler.utils`.

#### Logs

- `enable_logs` and `before_send_log` are now regular SDK options. Their original versions under `_experiments` have been removed.

#### Integrations
- Redis: In Redis pipeline spans there is no `span["data"]["redis.commands"]` that contains a dict `{"count": 3, "first_ten": ["cmd1", "cmd2", ...]}` but instead `span["data"]["redis.commands.count"]` (containing `3`) and `span["data"]["redis.commands.first_ten"]` (containing `["cmd1", "cmd2", ...]`).
Expand Down
8 changes: 3 additions & 5 deletions sentry_sdk/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
get_default_release,
handle_in_app,
logger,
get_before_send_log,
has_logs_enabled,
)
from sentry_sdk.serializer import serialize
from sentry_sdk.tracing import trace
Expand Down Expand Up @@ -326,7 +324,7 @@ def _capture_envelope(envelope: Envelope) -> None:

self.log_batcher = None

if has_logs_enabled(self.options):
if self.options.get("enable_logs") is True:
from sentry_sdk._log_batcher import LogBatcher

self.log_batcher = LogBatcher(capture_func=_capture_envelope)
Expand Down Expand Up @@ -823,7 +821,7 @@ def capture_event(
return return_value

def _capture_experimental_log(self, log: Optional[Log]) -> None:
if not has_logs_enabled(self.options) or log is None:
if self.options.get("enable_logs") is not True or log is None:
return

current_scope = sentry_sdk.get_current_scope()
Expand Down Expand Up @@ -878,7 +876,7 @@ def _capture_experimental_log(self, log: Optional[Log]) -> None:
f'[Sentry Logs] [{log.get("severity_text")}] {log.get("body")}'
)

before_send_log = get_before_send_log(self.options)
before_send_log = self.options.get("before_send_log")
if before_send_log is not None:
log = before_send_log(log, {})

Expand Down
2 changes: 0 additions & 2 deletions sentry_sdk/consts.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,6 @@ class CompressionAlgo(Enum):
"transport_compression_algo": Optional[CompressionAlgo],
"transport_num_pools": Optional[int],
"transport_http2": Optional[bool],
"enable_logs": Optional[bool],
"before_send_log": Optional[Callable[[Log, Hint], Optional[Log]]],
},
total=False,
)
Expand Down
3 changes: 1 addition & 2 deletions sentry_sdk/integrations/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
event_from_exception,
current_stacktrace,
capture_internal_exceptions,
has_logs_enabled,
)
from sentry_sdk.integrations import Integration

Expand Down Expand Up @@ -337,7 +336,7 @@ def emit(self, record: LogRecord) -> Any:
if not client.is_active():
return

if not has_logs_enabled(client.options):
if client.options.get("enable_logs") is not True:
return

self._capture_log_from_record(client, record)
Expand Down
3 changes: 1 addition & 2 deletions sentry_sdk/integrations/loguru.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
_BaseHandler,
)
from sentry_sdk.logger import _log_level_to_otel
from sentry_sdk.utils import has_logs_enabled

from typing import TYPE_CHECKING

Expand Down Expand Up @@ -148,7 +147,7 @@ def loguru_sentry_logs_handler(message: Message) -> None:
if not client.is_active():
return

if not has_logs_enabled(client.options):
if client.options.get("enable_logs") is not True:
return

record = message.record
Expand Down
23 changes: 1 addition & 22 deletions sentry_sdk/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
from gevent.hub import Hub as GeventHub
from opentelemetry.util.types import AttributeValue

from sentry_sdk._types import Event, ExcInfo, Log, Hint
from sentry_sdk._types import Event, ExcInfo

P = ParamSpec("P")
R = TypeVar("R")
Expand Down Expand Up @@ -1919,24 +1919,3 @@ def serialize_item(item):
return json.dumps(serialized, default=str)
except Exception:
return str(data)


def has_logs_enabled(options):
# type: (Optional[dict[str, Any]]) -> bool
if options is None:
return False

return bool(
options.get("enable_logs", False)
or options["_experiments"].get("enable_logs", False)
)


def get_before_send_log(options):
# type: (Optional[dict[str, Any]]) -> Optional[Callable[[Log, Hint], Optional[Log]]]
if options is None:
return None

return options.get("before_send_log") or options["_experiments"].get(
"before_send_log"
)
46 changes: 0 additions & 46 deletions tests/test_logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,22 +111,6 @@ def test_logs_basics(sentry_init, capture_envelopes):
assert logs[5].get("severity_number") == 21


@minimum_python_37
def test_logs_experimental_option_still_works(sentry_init, capture_envelopes):
sentry_init(_experiments={"enable_logs": True})
envelopes = capture_envelopes()

sentry_sdk.logger.error("This is an error log...")

get_client().flush()

logs = envelopes_to_logs(envelopes)
assert len(logs) == 1

assert logs[0].get("severity_text") == "error"
assert logs[0].get("severity_number") == 17


@minimum_python_37
def test_logs_before_send_log(sentry_init, capture_envelopes):
before_log_called = False
Expand Down Expand Up @@ -174,36 +158,6 @@ def _before_log(record, hint):
assert before_log_called is True


@minimum_python_37
def test_logs_before_send_log_experimental_option_still_works(
sentry_init, capture_envelopes
):
before_log_called = False

def _before_log(record, hint):
nonlocal before_log_called
before_log_called = True

return record

sentry_init(
enable_logs=True,
_experiments={
"before_send_log": _before_log,
},
)
envelopes = capture_envelopes()

sentry_sdk.logger.error("This is an error log...")

get_client().flush()
logs = envelopes_to_logs(envelopes)
assert len(logs) == 1

assert logs[0]["severity_text"] == "error"
assert before_log_called is True


@minimum_python_37
def test_logs_attributes(sentry_init, capture_envelopes):
"""
Expand Down
Loading