How to Log Python Errors with Sentry
Integrate Sentry into your Python app to catch and debug errors in real time. Learn setup, manual logging, and context enrichment to fix issues faster.
Here is the article, written for PythonSkillset.com.
Log Python Errors with Sentry (And Actually Fix Them Fast)
We have all been there. You push a new feature, everything works fine on your machine, and then you get the dreaded message from a user: "The app is broken." No stack trace. No details. Just a feeling of dread.
You could ask them to check the terminal, but that is not realistic. You could spend hours trying to reproduce the bug yourself. Or, you could use a tool that tells you exactly what went wrong, the moment it happens. That is where Sentry comes in.
Sentry is a monitoring tool that catches errors in real time. It is not just a log file. It gives you the line of code that failed, the variables at that moment, and even the user's browser or system information. For a PythonSkillset developer, this is a game changer.
Getting Started with the SDK
First, you need the Sentry SDK. Install it with pip:
pip install sentry-sdk
Next, you need a "DSN" (Data Source Name). Think of this as your project's unique address. You get this from the Sentry dashboard when you create a new project. It looks like a long URL.
Once you have that, the setup in your Python app is almost embarrassingly simple. You just need to initialize it right at the start of your application, usually in your main entry point (like app.py or main.py).
import sentry_sdk
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
# This tells Sentry to send 100% of transactions (errors)
traces_sample_rate=1.0,
)
# The rest of your app code...
That is it. By calling sentry_sdk.init(), Sentry automatically patches your existing Python libraries (like Django, Flask, or plain logging). If an error happens, Sentry catches it silently in the background. You do not have to change any of your existing try/except blocks.
Making Errors More Useful
The basic setup catches technical errors, like ZeroDivisionError or KeyError. But what about business logic? What if a user tries to sign up with a username that is already taken? That is not a Python crash, but it is still an event you want to track.
You can capture these manually. Let us say you have a function that checks a user's subscription status.
def check_subscription(user_id):
# ... some logic ...
if user_is_inactive:
# This will log a message, but not crash the app
sentry_sdk.capture_message("Inactive user tried to access premium feature")
return False
This is great, but you can do better. You can add extra context. Sentry lets you attach data to the scope of the error. This makes debugging infinitely easier.
from sentry_sdk import set_context
def process_payment(user_id, amount):
set_context("payment", {
"user_id": user_id,
"amount": amount,
"currency": "USD"
})
try:
# ... payment logic that might fail ...
result = payment_gateway.charge(amount)
except PaymentError as e:
# The context will be attached to this error automatically
sentry_sdk.capture_exception(e)
return False
Now, when that PaymentError shows up in your Sentry dashboard, you will see exactly which user and how much money was involved. You do not have to guess.
Real World Example from PythonSkillset
A few months ago, the PythonSkillset team noticed users were getting a strange 500 Internal Server Error on the "Export Article as PDF" feature. The stack trace in Sentry pointed to a very specific line: pdf_canvas.showPage().
Without Sentry, we would have been lost. With Sentry, we saw the error was happening because a specific user had an article title with a Unicode character that the PDF library could not render. The Sentry event showed the user's ID and the actual title text. We fixed the code in 15 minutes by adding a .encode('utf-8', 'ignore') call. The user never had to write a support ticket.
Conclusion
Logging to a file is like writing a note to yourself. Logging with Sentry is like sending that note to a detective who gives you a full report, the suspect's photo, and the motive.
Integrating Sentry into your Python project takes five minutes. The time it saves you when (not if) your app breaks is priceless. It is one of the smartest tools you can add to your PythonSkillset.
Comments
Questions, corrections, and tips stay visible for everyone reading this page.
Join the discussion
No comments yet
Be the first to leave a note — it helps the next reader.