Skip to content
Open
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
51 changes: 28 additions & 23 deletions docs/guides/logs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ Sentry.logger.<level>(message, { attributes });
```

```python {tabTitle: Python}
from sentry_sdk import logger
logger.<level>(message, attribute=value)
sentry_sdk.logger.<level>(message, attribute=value)
```

```php {tabTitle: PHP}
Expand Down Expand Up @@ -63,9 +62,7 @@ Sentry.logger.info("Order completed", {
```

```python {tabTitle: Python}
from sentry_sdk import logger as sentry_logger

sentry_logger.info("Order completed",
sentry_sdk.logger.info("Order completed",
order_id="order_123",
user_id=user.id,
amount=149.99,
Expand Down Expand Up @@ -155,17 +152,17 @@ Sentry.logger.warn("Login failed", {
```

```python {tabTitle: Python}
from sentry_sdk import logger as sentry_logger
import sentry_sdk

# After successful authentication
sentry_logger.info("User logged in",
sentry_sdk.logger.info("User logged in",
user_id=user.id,
auth_method="oauth",
provider="google"
)

# After authentication fails
sentry_logger.warning("Login failed",
sentry_sdk.logger.warning("Login failed",
email=masked_email,
reason="invalid_password",
attempt_count=3
Expand Down Expand Up @@ -282,10 +279,12 @@ Sentry.logger.error("Payment failed", {
```

```python {tabTitle: Python}
from sentry_sdk import logger as sentry_logger
import sentry_sdk

sentry_sdk.init(...)

# After payment gateway returns an error
sentry_logger.error("Payment failed",
sentry_sdk.logger.error("Payment failed",
order_id="order_123",
amount=99.99,
gateway="stripe",
Expand Down Expand Up @@ -388,21 +387,23 @@ Sentry.logger.info("Webhook received", {

```python {tabTitle: Python}
import time
from sentry_sdk import logger as sentry_logger
import sentry_sdk

sentry_sdk.init(...)

# Third-party API call
start = time.time()
response = shipping_api.get_rates(items)

sentry_logger.info("Shipping rates fetched",
sentry_sdk.logger.info("Shipping rates fetched",
service="shipping-provider",
endpoint="/rates",
duration_ms=int((time.time() - start) * 1000),
rate_count=len(response.rates)
)

# Webhook received
sentry_logger.info("Webhook received",
sentry_sdk.logger.info("Webhook received",
source="stripe",
event_type="payment_intent.succeeded",
payment_id=event["data"]["object"]["id"]
Expand Down Expand Up @@ -549,16 +550,18 @@ Sentry.logger.error("Job failed", {
```

```python {tabTitle: Python}
from sentry_sdk import logger as sentry_logger
import sentry_sdk

sentry_sdk.init(...)

# Inside background job handler
sentry_logger.info("Job started",
sentry_sdk.logger.info("Job started",
job_type="email-digest",
job_id="job_456",
queue="notifications"
)

sentry_logger.error("Job failed",
sentry_sdk.logger.error("Job failed",
job_type="email-digest",
job_id="job_456",
retry_count=3,
Expand Down Expand Up @@ -680,16 +683,18 @@ Sentry.logger.warn("Config reloaded", {
```

```python {tabTitle: Python}
from sentry_sdk import logger as sentry_logger
import sentry_sdk

sentry_sdk.init(...)

# When feature flag is checked or config changes
sentry_logger.info("Feature flag evaluated",
sentry_sdk.logger.info("Feature flag evaluated",
flag="new-checkout-flow",
enabled=True,
user_id=user.id
)

sentry_logger.warning("Config reloaded",
sentry_sdk.logger.warning("Config reloaded",
reason="env-change",
changed_keys=["API_TIMEOUT", "MAX_CONNECTIONS"]
)
Expand Down Expand Up @@ -902,9 +907,9 @@ Sentry.logger.error("Payment failed", { reason: "Insufficient Funds" });
```

```python {tabTitle: Python}
sentry_logger.info("Checkout started", user_id="882")
sentry_logger.info("Discount applied", code="WINTER20")
sentry_logger.error("Payment failed", reason="Insufficient Funds")
sentry_sdk.logger.info("Checkout started", user_id="882")
sentry_sdk.logger.info("Discount applied", code="WINTER20")
sentry_sdk.logger.error("Payment failed", reason="Insufficient Funds")
```

```php {tabTitle: PHP}
Expand Down Expand Up @@ -960,7 +965,7 @@ Sentry.logger.error("Checkout failed", {
```

```python {tabTitle: Python}
sentry_logger.error("Checkout failed",
sentry_sdk.logger.error("Checkout failed",
user_id="882",
order_id="order_pc_991",
cart_total=142.50,
Expand Down
12 changes: 6 additions & 6 deletions platform-includes/logs/best-practices/python.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ This makes debugging dramatically faster — one query returns everything about

```python
# ❌ Scattered thin logs
sentry_logger.info("Starting checkout")
sentry_logger.info("Validating cart")
sentry_logger.info("Processing payment")
sentry_logger.info("Checkout complete")
sentry_sdk.logger.info("Starting checkout")
sentry_sdk.logger.info("Validating cart")
sentry_sdk.logger.info("Processing payment")
sentry_sdk.logger.info("Checkout complete")

# ✅ One wide event with full context
sentry_logger.info(
sentry_sdk.logger.info(
"Checkout completed",
attributes={
"order_id": order.id,
Expand Down Expand Up @@ -54,7 +54,7 @@ This lets you filter logs by high-value customers or specific features.
<SplitSectionCode>

```python
sentry_logger.info(
sentry_sdk.logger.info(
"API request completed",
attributes={
# User context
Expand Down
20 changes: 10 additions & 10 deletions platform-includes/logs/usage/python.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,22 @@ The `logger` namespace exposes six methods that you can use to log messages at d
You can send structured messages by using the `{attribute_name}` placeholder syntax. The properties of this message will be sent to Sentry, and can be searched from within the Logs UI, and even added to the Logs views as a dedicated column.

```python
from sentry_sdk import logger as sentry_logger
import sentry_sdk

sentry_logger.trace('Starting database connection {database}', database="users")
sentry_logger.debug('Cache miss for user {user_id}', user_id=123)
sentry_logger.info('Updated global cache')
sentry_logger.warning('Rate limit reached for endpoint {endpoint}', endpoint='/api/results/')
sentry_logger.error('Failed to process payment. Order: {order_id}. Amount: {amount}', order_id="or_2342", amount=99.99)
sentry_logger.fatal('Database {database} connection pool exhausted', database="users")
sentry_sdk.init(...)

sentry_sdk.logger.trace('Starting database connection {database}', database="users")
sentry_sdk.logger.debug('Cache miss for user {user_id}', user_id=123)
sentry_sdk.logger.info('Updated global cache')
sentry_sdk.logger.warning('Rate limit reached for endpoint {endpoint}', endpoint='/api/results/')
sentry_sdk.logger.error('Failed to process payment. Order: {order_id}. Amount: {amount}', order_id="or_2342", amount=99.99)
sentry_sdk.logger.fatal('Database {database} connection pool exhausted', database="users")
```

You can also pass additional attributes directly to the logging functions via the `attributes` kwarg.

```python
from sentry_sdk import logger as sentry_logger

sentry_logger.error(
sentry_sdk.logger.error(
Comment thread
sentry[bot] marked this conversation as resolved.
Comment thread
sentrivana marked this conversation as resolved.
'Payment processing failed',
attributes={
'payment.provider': 'stripe',
Expand Down
Loading