---
name: sentry-setup-logging
description: Setup Sentry Logging in any project. Use when asked to add Sentry logs, enable structured logging, capture console logs, or integrate logging libraries (Consola, Loguru) with Sentry. Supports JavaScript, Python, and Ruby.
license: Apache-2.0
---

# Setup Sentry Logging

Configure Sentry's structured logging feature.

## Invoke This Skill When

- User asks to "setup Sentry logging" or "capture logs in Sentry"
- User wants to integrate logging libraries (Pino, Winston, Loguru) with Sentry
- User asks about `Sentry.logger` or `sentry_sdk.logger`

**Important:** The SDK versions, API names, and code samples below are examples. Always verify against [docs.sentry.io](https://docs.sentry.io) before implementing, as APIs and minimum versions may have changed.

## Quick Reference

| Platform | Min SDK | Enable Flag | Logger API |
|----------|---------|-------------|------------|
| JavaScript | 9.41.0+ | `enableLogs: true` | `Sentry.logger.*` |
| Python | 2.35.0+ | `enable_logs=True` | `sentry_sdk.logger.*` |
| Ruby | 5.24.0+ | `config.enable_logs = true` | `Sentry.logger.*` |

## JavaScript Setup

### 1. Verify SDK version
```bash
grep -E '"@sentry/(nextjs|react|node|browser)"' package.json
```

### 2. Enable in Sentry.init()
```javascript
Sentry.init({
  dsn: "YOUR_DSN",
  enableLogs: true,
});
```

### 3. Console capture (optional)
```javascript
integrations: [
  Sentry.consoleLoggingIntegration({ levels: ["warn", "error"] }),
],
```

### 4. Use structured logging
```javascript
Sentry.logger.info("User logged in", { userId: "123" });
Sentry.logger.error("Payment failed", { orderId: "456", amount: 99.99 });

// Template literals (creates searchable attributes)
Sentry.logger.info(Sentry.logger.fmt`User ${userId} purchased ${productName}`);
```

### Third-party integrations

| Library | Integration | Min SDK |
|---------|-------------|---------|
| Consola | `Sentry.createConsolaReporter()` | 10.12.0+ |
| Console capture | `Sentry.consoleLoggingIntegration()` | 10.13.0+ |

## Python Setup

### 1. Verify SDK version
```bash
pip show sentry-sdk | grep Version
```

### 2. Enable in init()
```python
sentry_sdk.init(
    dsn="YOUR_DSN",
    enable_logs=True,
)
```

### 3. Stdlib logging capture (optional)
```python
from sentry_sdk.integrations.logging import LoggingIntegration
integrations=[LoggingIntegration(sentry_logs_level=logging.INFO)]
```

### 4. Use structured logging
```python
from sentry_sdk import logger as sentry_logger

sentry_logger.info("User logged in: {user_id}", user_id="123")
sentry_logger.error("Payment failed", order_id="456", amount=99.99)
```

### Loguru integration
```python
from sentry_sdk.integrations.loguru import LoguruIntegration
integrations=[LoguruIntegration(sentry_logs_level=LoggingLevels.INFO.value)]
```

## Ruby Setup

### 1. Verify SDK version
```bash
bundle show sentry-ruby
```

### 2. Enable in init
```ruby
Sentry.init do |config|
  config.dsn = "YOUR_DSN"
  config.enable_logs = true
  config.enabled_patches << :logger  # Optional: capture stdlib Logger
end
```

### 3. Use structured logging
```ruby
Sentry.logger.info("User logged in")
Sentry.logger.error("Payment failed. Order: %{order_id}", order_id: "456")
```

## Log Filtering

### JavaScript
```javascript
beforeSendLog: (log) => log.level === "info" ? null : log,
```

### Python
```python
def before_send_log(log, hint):
    return None if log["severity_text"] == "info" else log
```

## Verification

After enabling logs, emit a test log and check the Sentry Logs dashboard (Explore > Logs):

```javascript
Sentry.logger.info("Sentry logging test");
```

## Troubleshooting

| Issue | Solution |
|-------|----------|
| Logs not appearing | Verify SDK version, check `enableLogs`/`enable_logs` is set |
| Too many logs | Use `beforeSendLog` to filter, reduce captured levels |
| Console not captured | Add `consoleLoggingIntegration` to integrations array |
