Flask

The Flask integration adds support for the Flask Web Framework.

Install sentry-sdk from PyPI with the flask extra:

Copied
pip install --upgrade "sentry-sdk[flask]"

If you have the flask package in your dependencies, the Flask integration will be enabled automatically when you initialize the Sentry SDK.

Copied
from flask import Flask
import sentry_sdk

sentry_sdk.init(
    dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
    enable_tracing=True,
)

app = Flask(__name__)

Copied
from flask import Flask

sentry_sdk.init(...)  # same as above

app = Flask(__name__)

@app.route("/")
def hello_world():
    1/0  # raises an error
    return "<p>Hello, World!</p>"

When you point your browser to http://localhost:5000/ a transaction in the Performance section of sentry.io will be created. Additionally, an error event will be sent to sentry.io and will be connected to the transaction.

It takes a couple of moments for the data to appear in sentry.io.

After initialization:

  • If you use flask-login and set send_default_pii=True in your call to init, user data (current user id, email address, username) will be attached to the event.
  • Request data will be attached to all events: HTTP method, URL, headers, form data, JSON payloads. Sentry excludes raw bodies and multipart file uploads.
  • Logs emitted by app.logger or any logger will be recorded as breadcrumbs by the Logging integration (this integration is enabled by default).

If you add FlaskIntegration explicitly to your sentry_sdk.init() call you can set options for FlaskIntegration to change its behavior:

Copied
import sentry_sdk
from sentry_sdk.integrations.flask import FlaskIntegration

sentry_sdk.init(
    dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
    enable_tracing=True,
    integrations = [
        FlaskIntegration(
            transaction_style="url",
        ),
    ],
)

You can pass the following keyword arguments to FlaskIntegration():

  • transaction_style:

    Copied
    @app.route("/myurl/<foo>")
    def myendpoint():
        return "<p>Hello, World!</p>"
    

    In the above code, you would set the transaction to:

    • /myurl/<foo> if you set transaction_style="url".
    • myendpoint if you set transaction_style="endpoint"

    The default is "endpoint".

  • Flask: 0.11+
  • Python: 2.7+ (Flask 0.11+), 3.6 (Flask 2.0+)
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").