Skip to content
Closed
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
2 changes: 1 addition & 1 deletion sentry_sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"start_transaction",
"trace",
"monitor",
"_experimental_logger",
"logger",
]

# Initialize the debug support after everything is loaded
Expand Down
4 changes: 2 additions & 2 deletions sentry_sdk/_experimental_logger.py → sentry_sdk/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def _capture_log(severity_text, severity_number, template, **kwargs):
if "attributes" in kwargs:
attrs.update(kwargs.pop("attributes"))
for k, v in kwargs.items():
attrs[f"sentry.message.parameters.{k}"] = v
attrs[f"sentry.message.parameters.{k}"] = v if isinstance(v, str) else repr(v)

# noinspection PyProtectedMember
client._capture_experimental_log(
Expand All @@ -36,6 +36,6 @@ def _capture_log(severity_text, severity_number, template, **kwargs):
trace = functools.partial(_capture_log, "trace", 1)
debug = functools.partial(_capture_log, "debug", 5)
info = functools.partial(_capture_log, "info", 9)
warn = functools.partial(_capture_log, "warn", 13)
warning = functools.partial(_capture_log, "warning", 13)
error = functools.partial(_capture_log, "error", 17)
fatal = functools.partial(_capture_log, "fatal", 21)
5 changes: 3 additions & 2 deletions sentry_sdk/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from sentry_sdk._types import Event, EventDataCategory, Hint
from sentry_sdk._types import Event, EventDataCategory, Hint, Log
else:
from typing import Any

Expand All @@ -20,5 +20,6 @@
Event = Any
EventDataCategory = Any
Hint = Any
Log = Any

__all__ = ("Event", "EventDataCategory", "Hint")
__all__ = ("Event", "EventDataCategory", "Hint", "Log")
57 changes: 28 additions & 29 deletions tests/test_logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import pytest

import sentry_sdk
from sentry_sdk import _experimental_logger as sentry_logger
from sentry_sdk.integrations.logging import LoggingIntegration

minimum_python_37 = pytest.mark.skipif(
Expand All @@ -25,12 +24,12 @@ def test_logs_disabled_by_default(sentry_init, capture_envelopes):

envelopes = capture_envelopes()

sentry_logger.trace("This is a 'trace' log.")
sentry_logger.debug("This is a 'debug' log...")
sentry_logger.info("This is a 'info' log...")
sentry_logger.warn("This is a 'warn' log...")
sentry_logger.error("This is a 'error' log...")
sentry_logger.fatal("This is a 'fatal' log...")
sentry_sdk.logger.trace("This is a 'trace' log.")
sentry_sdk.logger.debug("This is a 'debug' log...")
sentry_sdk.logger.info("This is a 'info' log...")
sentry_sdk.logger.warning("This is a 'warning' log...")
sentry_sdk.logger.error("This is a 'error' log...")
sentry_sdk.logger.fatal("This is a 'fatal' log...")
python_logger.warning("sad")

assert len(envelopes) == 0
Expand All @@ -41,12 +40,12 @@ def test_logs_basics(sentry_init, capture_envelopes):
sentry_init(_experiments={"enable_sentry_logs": True})
envelopes = capture_envelopes()

sentry_logger.trace("This is a 'trace' log...")
sentry_logger.debug("This is a 'debug' log...")
sentry_logger.info("This is a 'info' log...")
sentry_logger.warn("This is a 'warn' log...")
sentry_logger.error("This is a 'error' log...")
sentry_logger.fatal("This is a 'fatal' log...")
sentry_sdk.logger.trace("This is a 'trace' log...")
sentry_sdk.logger.debug("This is a 'debug' log...")
sentry_sdk.logger.info("This is a 'info' log...")
sentry_sdk.logger.warning("This is a 'warn' log...")
sentry_sdk.logger.error("This is a 'error' log...")
sentry_sdk.logger.fatal("This is a 'fatal' log...")

assert (
len(envelopes) == 6
Expand All @@ -61,7 +60,7 @@ def test_logs_basics(sentry_init, capture_envelopes):
assert envelopes[2].items[0].payload.json["severityText"] == "info"
assert envelopes[2].items[0].payload.json["severityNumber"] == 9

assert envelopes[3].items[0].payload.json["severityText"] == "warn"
assert envelopes[3].items[0].payload.json["severityText"] == "warning"
assert envelopes[3].items[0].payload.json["severityNumber"] == 13

assert envelopes[4].items[0].payload.json["severityText"] == "error"
Expand Down Expand Up @@ -96,19 +95,19 @@ def _before_log(record, hint):
)
envelopes = capture_envelopes()

sentry_logger.trace("This is a 'trace' log...")
sentry_logger.debug("This is a 'debug' log...")
sentry_logger.info("This is a 'info' log...")
sentry_logger.warn("This is a 'warn' log...")
sentry_logger.error("This is a 'error' log...")
sentry_logger.fatal("This is a 'fatal' log...")
sentry_sdk.logger.trace("This is a 'trace' log...")
sentry_sdk.logger.debug("This is a 'debug' log...")
sentry_sdk.logger.info("This is a 'info' log...")
sentry_sdk.logger.warning("This is a 'warning' log...")
sentry_sdk.logger.error("This is a 'error' log...")
sentry_sdk.logger.fatal("This is a 'fatal' log...")

assert len(envelopes) == 4

assert envelopes[0].items[0].payload.json["severityText"] == "trace"
assert envelopes[1].items[0].payload.json["severityText"] == "debug"
assert envelopes[2].items[0].payload.json["severityText"] == "info"
assert envelopes[3].items[0].payload.json["severityText"] == "warn"
assert envelopes[3].items[0].payload.json["severityText"] == "warning"


@minimum_python_37
Expand All @@ -126,7 +125,7 @@ def test_logs_attributes(sentry_init, capture_envelopes):
"attr_string": "string attribute",
}

sentry_logger.warn(
sentry_sdk.logger.warning(
"The recorded value was '{my_var}'", my_var="some value", attributes=attrs
)

Expand All @@ -151,10 +150,10 @@ def test_logs_message_params(sentry_init, capture_envelopes):
sentry_init(_experiments={"enable_sentry_logs": True})
envelopes = capture_envelopes()

sentry_logger.warn("The recorded value was '{int_var}'", int_var=1)
sentry_logger.warn("The recorded value was '{float_var}'", float_var=2.0)
sentry_logger.warn("The recorded value was '{bool_var}'", bool_var=False)
sentry_logger.warn(
sentry_sdk.logger.warning("The recorded value was '{int_var}'", int_var=1)
sentry_sdk.logger.warning("The recorded value was '{float_var}'", float_var=2.0)
sentry_sdk.logger.warning("The recorded value was '{bool_var}'", bool_var=False)
sentry_sdk.logger.warning(
"The recorded value was '{string_var}'", string_var="some string value"
)

Expand Down Expand Up @@ -200,7 +199,7 @@ def test_logs_tied_to_transactions(sentry_init, capture_envelopes):
envelopes = capture_envelopes()

with sentry_sdk.start_transaction(name="test-transaction") as trx:
sentry_logger.warn("This is a log tied to a transaction")
sentry_sdk.logger.warning("This is a log tied to a transaction")

log_entry = envelopes[0].items[0].payload.json
assert log_entry["attributes"][-1] == {
Expand All @@ -219,7 +218,7 @@ def test_logs_tied_to_spans(sentry_init, capture_envelopes):

with sentry_sdk.start_transaction(name="test-transaction"):
with sentry_sdk.start_span(description="test-span") as span:
sentry_logger.warn("This is a log tied to a span")
sentry_sdk.logger.warning("This is a log tied to a span")

attrs = otel_attributes_to_dict(envelopes[0].items[0].payload.json["attributes"])
assert attrs["sentry.trace.parent_span_id"] == {"stringValue": span.span_id}
Expand Down Expand Up @@ -248,7 +247,7 @@ def test_logger_integration_warning(sentry_init, capture_envelopes):
assert attrs["sentry.message.parameters.0"] == {"stringValue": "1"}
assert attrs["sentry.message.parameters.1"]
assert log_entry["severityNumber"] == 13
assert log_entry["severityText"] == "warn"
assert log_entry["severityText"] == "warning"


@minimum_python_37
Expand Down
Loading