sentry-setup-logging
Setup Sentry Logging
This skill helps configure Sentry's structured logging feature across multiple platforms and frameworks.
When to Use This Skill
Invoke this skill when:
- User asks to "setup Sentry logging" or "add Sentry logs"
- User wants to "capture console logs in Sentry"
- User requests "structured logging with Sentry"
- User mentions they want to send logs to Sentry
- User asks about
Sentry.loggerorsentry_sdk.logger - User wants to integrate their existing logging library with Sentry
Platform Detection
Before configuring, detect the project's platform:
JavaScript/TypeScript Detection
Check for these files:
package.json- Read to identify framework and Sentry SDK version- Look for
@sentry/nextjs,@sentry/react,@sentry/node,@sentry/browser, etc. - Check if SDK version is 9.41.0+ (required for logging)
Python Detection
Check for:
requirements.txt,pyproject.toml,setup.py, orPipfile- Look for
sentry-sdkversion 2.35.0+ (required for logging)
Ruby Detection
Check for:
Gemfileor*.gemspec- Look for
sentry-rubygem version 5.24.0+ (required for logging)
Required Information
Ask the user:
I'll help you set up Sentry Logging. First, let me check your project setup.
After detecting the platform, I need to know:
1. **Logging approach** - Which setup do you prefer?
- Console Integration: Automatically capture existing console.log/print statements
- Structured Logging: Use Sentry.logger for new structured log calls
- Both: Set up both approaches
2. **Log levels** (optional): Which levels should be captured?
- Default: info, warn, error
- All: trace, debug, info, warn, error, fatal
Configuration by Platform
JavaScript/TypeScript Platforms
Minimum SDK Versions
- All JS platforms:
9.41.0+ - Consola integration:
10.12.0+
Step 1: Verify SDK Version
grep -E '"@sentry/(nextjs|react|node|browser)"' package.json
If version is below 9.41.0, inform user to upgrade:
npm install @sentry/nextjs@latest # or appropriate package
Step 2: Enable Logging in Init
Find the Sentry.init() call and add enableLogs: true.
Locate init files:
- Next.js:
instrumentation-client.ts,sentry.server.config.ts,sentry.edge.config.ts - React:
src/index.tsx,src/main.tsx, or dedicated sentry config file - Node.js: Entry point file or dedicated sentry config
- Browser: Entry point or config file
Modify init:
import * as Sentry from "@sentry/nextjs"; // or @sentry/react, @sentry/node, etc.
Sentry.init({
dsn: "YOUR_DSN_HERE",
// Enable structured logging
enableLogs: true,
// ... other existing config
});
Step 3: Setup Console Integration (Optional)
If user wants console log capture, add the integration:
import * as Sentry from "@sentry/nextjs";
Sentry.init({
dsn: "YOUR_DSN_HERE",
enableLogs: true,
integrations: [
Sentry.consoleLoggingIntegration({
levels: ["log", "warn", "error"] // Customize as needed
}),
],
});
Available console levels: debug, info, warn, error, log, assert, trace
Step 4: Setup Log Filtering (Optional)
If user wants to filter logs before sending:
Sentry.init({
dsn: "YOUR_DSN_HERE",
enableLogs: true,
beforeSendLog: (log) => {
// Drop info-level logs
if (log.level === "info") {
return null;
}
// Modify or pass through
return log;
},
});
Structured Logging Examples (JavaScript)
Provide these examples to the user:
// Basic logging with attributes
Sentry.logger.info("User logged in", {
userId: "user_123",
method: "oauth",
});
Sentry.logger.error("Payment failed", {
orderId: "order_456",
amount: 99.99,
currency: "USD",
});
// Template literal formatting (creates searchable attributes)
Sentry.logger.info(
Sentry.logger.fmt`User '${user.name}' purchased '${product.name}'`
);
// All available log levels
Sentry.logger.trace("Detailed trace info");
Sentry.logger.debug("Debug information");
Sentry.logger.info("Informational message");
Sentry.logger.warn("Warning message");
Sentry.logger.error("Error occurred");
Sentry.logger.fatal("Fatal error - application cannot continue");
Third-Party Logger Integrations (JavaScript)
Pino Integration:
import * as Sentry from "@sentry/node";
import pino from "pino";
Sentry.init({
dsn: "YOUR_DSN_HERE",
enableLogs: true,
integrations: [Sentry.pinoIntegration()],
});
const logger = pino();
logger.info("This goes to Sentry");
Winston Integration:
import * as Sentry from "@sentry/node";
import winston from "winston";
Sentry.init({
dsn: "YOUR_DSN_HERE",
enableLogs: true,
});
const sentryTransport = Sentry.createSentryWinstonTransport();
const logger = winston.createLogger({
transports: [sentryTransport],
});
Consola Integration (SDK 10.12.0+):
import * as Sentry from "@sentry/node";
import { consola } from "consola";
Sentry.init({
dsn: "YOUR_DSN_HERE",
enableLogs: true,
});
const sentryReporter = Sentry.createConsolaReporter({
levels: ["error", "warn", "info"],
});
consola.addReporter(sentryReporter);
Python Platform
Minimum SDK Version
sentry-sdkversion2.35.0+
Step 1: Verify SDK Version
pip show sentry-sdk | grep Version
If version is below 2.35.0:
pip install --upgrade sentry-sdk
Step 2: Enable Logging in Init
Find sentry_sdk.init() and add enable_logs=True.
Common locations:
- Django:
settings.py - Flask:
app.pyor__init__.py - FastAPI:
main.py - General: Entry point or dedicated config file
Modify init:
import sentry_sdk
sentry_sdk.init(
dsn="YOUR_DSN_HERE",
# Enable structured logging
enable_logs=True,
# ... other existing config
)
Step 3: Setup Standard Library Logging Integration (Optional)
To capture Python's stdlib logging:
import logging
import sentry_sdk
from sentry_sdk.integrations.logging import LoggingIntegration
sentry_sdk.init(
dsn="YOUR_DSN_HERE",
enable_logs=True,
integrations=[
LoggingIntegration(
sentry_logs_level=logging.WARNING # Capture WARNING and above
)
],
)
Available levels: logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL
Step 4: Setup Log Filtering (Optional)
def before_send_log(log, hint):
# Drop info-level logs
if log["severity_text"] == "info":
return None
return log
sentry_sdk.init(
dsn="YOUR_DSN_HERE",
enable_logs=True,
before_send_log=before_send_log,
)
Structured Logging Examples (Python)
from sentry_sdk import logger as sentry_logger
# Basic logging with placeholder syntax
sentry_logger.info("User logged in: {user_id}", user_id="user_123")
sentry_logger.error(
"Payment failed. Order: {order_id}. Amount: {amount}",
order_id="order_456",
amount=99.99
)
# Using attributes kwarg for additional context
sentry_logger.warning(
"Rate limit approaching",
attributes={
"endpoint": "/api/users",
"current_rate": 95,
"limit": 100,
}
)
# All available log levels
sentry_logger.trace("Detailed trace info")
sentry_logger.debug("Debug information")
sentry_logger.info("Informational message")
sentry_logger.warning("Warning message")
sentry_logger.error("Error occurred")
sentry_logger.fatal("Fatal error")
Loguru Integration (Python)
import sentry_sdk
from sentry_sdk.integrations.loguru import LoguruIntegration, LoggingLevels
from loguru import logger
sentry_sdk.init(
dsn="YOUR_DSN_HERE",
enable_logs=True,
integrations=[
LoguruIntegration(
sentry_logs_level=LoggingLevels.WARNING.value
)
],
)
logger.warning("This goes to Sentry")
Ruby Platform
Minimum SDK Version
sentry-rubyversion5.24.0+
Step 1: Verify SDK Version
bundle show sentry-ruby
# or
gem list sentry-ruby
If version is below 5.24.0:
# In Gemfile
gem "sentry-ruby", ">= 5.24.0"
Then run bundle update sentry-ruby
Step 2: Enable Logging in Init
Find Sentry.init block and add config.enable_logs = true.
Common locations:
- Rails:
config/initializers/sentry.rb - Sinatra/other: Entry point or config file
Modify init:
Sentry.init do |config|
config.dsn = "YOUR_DSN_HERE"
# Enable structured logging
config.enable_logs = true
# ... other existing config
end
Step 3: Setup Standard Logger Integration (Optional)
To capture Ruby's stdlib Logger:
Sentry.init do |config|
config.dsn = "YOUR_DSN_HERE"
config.enable_logs = true
config.enabled_patches = [:logger]
end
Structured Logging Examples (Ruby)
# Basic logging
Sentry.logger.info("User logged in")
# With named parameters (become searchable attributes)
Sentry.logger.debug("Cache miss for user %{user_id}", user_id: 123)
Sentry.logger.error(
"Payment failed. Order: %{order_id}. Amount: %{amount}",
order_id: "order_456",
amount: 99.99
)
# All available log levels
Sentry.logger.trace("Detailed trace info")
Sentry.logger.debug("Debug information")
Sentry.logger.info("Informational message")
Sentry.logger.warning("Warning message")
Sentry.logger.error("Error occurred")
Sentry.logger.fatal("Fatal error")
Framework-Specific Notes
Next.js
- Enable logging in ALL init files:
instrumentation-client.ts,sentry.server.config.ts,sentry.edge.config.ts - Console integration works on both client and server
- Use
Sentry.loggerfrom@sentry/nextjs
React (Browser)
- Enable logging in client init file only
- Console integration captures browser console calls
- Use
Sentry.loggerfrom@sentry/react
Node.js
- Pino, Winston, and Consola integrations available
- Console integration captures server-side console calls
- Use
Sentry.loggerfrom@sentry/node
Django
- Add logging config in
settings.py - LoggingIntegration captures Django's logging
- Extra fields in log records become Sentry attributes
Flask
- Add logging config where you initialize the app
- Works with Flask's built-in logging
Rails
- Add to
config/initializers/sentry.rb - Enable
:loggerpatch for stdlib Logger capture
Verification Steps
After setup, provide these verification instructions:
JavaScript Verification
// Add this temporarily to test
Sentry.logger.info("Sentry logging test", {
test: true,
timestamp: new Date().toISOString(),
});
console.log("Console capture test"); // If console integration enabled
Python Verification
from sentry_sdk import logger as sentry_logger
sentry_logger.info("Sentry logging test", test=True)
import logging
logging.warning("Standard logging test") # If LoggingIntegration enabled
Ruby Verification
Sentry.logger.info("Sentry logging test")
Tell user to check their Sentry dashboard under Logs section to verify logs are arriving.
Common Issues and Solutions
Issue: Logs not appearing in Sentry
Solutions:
- Verify SDK version meets minimum requirements
- Ensure
enableLogs: true(JS) orenable_logs=True(Python/Ruby) is set - Check DSN is correct
- Verify you're looking at the Logs section (not Issues)
- Check log level filtering isn't too restrictive
Issue: Too many logs being sent
Solutions:
- Use
beforeSendLog/before_send_logto filter - Reduce log levels captured in console integration
- Only enable logging where needed (e.g., just server-side)
Issue: Console integration not capturing logs
Solutions:
- Ensure integration is added to
integrationsarray - Verify desired levels are included in
levelsarray - Check for conflicts with other logging libraries
Issue: SDK version too old
Solutions:
- JavaScript:
npm install @sentry/nextjs@latest - Python:
pip install --upgrade sentry-sdk - Ruby:
bundle update sentry-ruby
Summary Checklist
Provide this checklist after setup:
## Sentry Logging Setup Complete
### Configuration Applied:
- [ ] SDK version verified (meets minimum requirements)
- [ ] `enableLogs` / `enable_logs` added to Sentry.init()
- [ ] Console integration added (if requested)
- [ ] Log filtering configured (if requested)
- [ ] Third-party logger integration added (if applicable)
### Sample Code Provided:
- [ ] Structured logging examples for your platform
- [ ] Verification test code
### Next Steps:
1. Run your application
2. Trigger some test logs
3. Check Sentry dashboard > Logs section
4. Adjust log levels and filtering as needed
Quick Reference
| Platform | SDK Version | 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.* |
| Log Level | JavaScript | Python | Ruby |
|---|---|---|---|
| Trace | trace() |
trace() |
trace() |
| Debug | debug() |
debug() |
debug() |
| Info | info() |
info() |
info() |
| Warning | warn() |
warning() |
warning() |
| Error | error() |
error() |
error() |
| Fatal | fatal() |
fatal() |
fatal() |