NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1013 most downloaded on PyPI
The best Python observability tool! 🪵🔥
Last release 9 days ago
25 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
199 releases · first in 2020
One column per quarter.
Update the process.pid resource attribute after os.fork() by @alexmojaki in #647
Use exc_info in structlog processor by @alexmojaki in #641
Add instrument_sqlite3 by @Kludex in #634
instrument_sqlite3 by @Kludex in #634Add logfire.suppress_scopes method by @alexmojaki in #628
Allow new context argument of metric instrument methods to be passed positionally by @alexmojaki in #616
Support logfire.instrument without arguments by @Kludex in #607
Respect repr on fields when logging a dataclass by @dmontagu in #592
Ignore trivial/empty functions in auto-tracing by @alexmojaki in #596
Allow instrumenting a single httpx client by @alexmojaki in #575
Check .logfire for creds to respect 'if-token-present' setting by @sydney-runkle in #561
.logfire for creds to respect 'if-token-present' setting by @sydney-runkle in #561Use functools.wraps in @logfire.instrument by @alexmojaki in #562
Add ASGI & WSGI instrument methods by @Kludex in #324
@logfire.instrument() no longer needs source code by @alexmojaki in #543. BREAKING CHANGES caused by this:
@logfire.instrument() no longer needs source code by @alexmojaki in #543. BREAKING CHANGES caused by this:
@logfire.instrument() and functions nested within them can now be auto-traced unlike before. Use @logfire.no_auto_trace anywhere on functions you want to exclude, especially the instrumented function..asend method properly - the generator will only receive None. But instrument shouldn't be used on generators anyway unless the generator is being used as a context manager, so new warnings about this have been added. See https://logfire.pydantic.dev/docs/guides/advanced/generators/#using-logfireinstrumentHandle NonRecordingSpans for fastapi arguments by @alexmojaki in #551
Handle null fastapi route.name and route.operation_id by @alexmojaki in #547
Add Code Source links by @Kludex in #451 and #505
use_opentelemetry_instrumentation kwarg by @alexmojaki in #509LogfireLoggingHandler spans by @samuelcolvin in #534None as None instead of null in messages by @alexmojaki in #525PYTEST_VERSION instead of PYTEST_CURRENT_TEST to detect logfire.configure() being called within a pytest run but outside any test by @Kludex in #531Add local parameter to logfire.configure() by @alexmojaki in #508
local parameter to logfire.configure() by @alexmojaki in #508Fix error in checking for generators in auto-tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/498
'if-token-present' for env var 'LOGFIRE_SEND_TO_LOGFIRE' by @sydney-runkle in https://github.com/pydantic/logfire/pull/488Compression.Gzip by @Kludex in https://github.com/pydantic/logfire/pull/491Fix warning about unregistered MetricReaders by @alexmojaki in https://github.com/pydantic/logfire/pull/465
Upgrade DeprecationWarnings to UserWarnings by @alexmojaki in https://github.com/pydantic/logfire/pull/458
DeprecationWarnings to UserWarnings by @alexmojaki in https://github.com/pydantic/logfire/pull/458Replace pydantic_plugin in logfire.configure() with logfire.instrument_pydantic() by @alexmojaki in https://github.com/pydantic/logfire/pull/453
pydantic_plugin in logfire.configure() with logfire.instrument_pydantic() by @alexmojaki in https://github.com/pydantic/logfire/pull/453METRICS_PREFERRED_TEMPORALITY private by @alexmojaki in https://github.com/pydantic/logfire/pull/456SeededRandomIdGenerator by default to prevent interference from random.seed by @alexmojaki in https://github.com/pydantic/logfire/pull/457Changes in `logfire.configure()`:
logfire.configure():
show_summary and fast_shutdown by @alexmojaki in https://github.com/pydantic/logfire/pull/431base_url, id_generator, and ns_timestamp_generator parameters into advanced: AdvancedOptions by @alexmojaki in https://github.com/pydantic/logfire/pull/432metrics parameter by @alexmojaki in https://github.com/pydantic/logfire/pull/444min_duration for install_auto_tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/446Deprecate project_name in logfire.configure(), remove old kwargs from signature by @alexmojaki in https://github.com/pydantic/logfire/pull/428
project_name in logfire.configure(), remove old kwargs from signature by @alexmojaki in https://github.com/pydantic/logfire/pull/428Handle FastAPI update with SolvedDependencies by @alexmojaki in https://github.com/pydantic/logfire/pull/415
default_span_processor parameter from configure by @alexmojaki in https://github.com/pydantic/logfire/pull/400custom_scope_suffix parameter of Logfire.log by @alexmojaki in https://github.com/pydantic/logfire/pull/399service_version field to _LogfireConfigData so that it gets copied into subprocesses by @alexmojaki in https://github.com/pydantic/logfire/pull/401System metrics are no longer collected by default when the correct dependency is installed. Use `logfire.instrument_system_metrics()` to enable system
logfire.instrument_system_metrics() to enable system metrics collection. If you are simply using the old 'Basic System Metrics' dashboard, then no further code changes are required, but that dashboard will no longer work properly and you should create a new dashboard from the template named 'Basic System Metrics (Logfire)'. If you were using other collected metrics, see the documentation for how to collect those. By @alexmojaki in https://github.com/pydantic/logfire/pull/373LambdaRuntimeClient before logging tracebacks in _ensure_flush_after_aws_lambda by @alexmojaki in https://github.com/pydantic/logfire/pull/388BREAKING CHANGES: Separate sending to Logfire from using standard OTEL environment variables by @alexmojaki in https://github.com/pydantic/logfire/pul…
(Previously released as v0.50.0, then yanked due to https://github.com/pydantic/logfire/issues/367)
OTEL_EXPORTER_OTLP_ENDPOINT is no longer just an alternative to LOGFIRE_BASE_URL. Setting OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, and/or OTEL_EXPORTER_OTLP_METRICS_ENDPOINT will set up appropriate exporters in addition to sending to Logfire, which must be turned off separately if desired. These are basic exporters relying on OTEL defaults. In particular they don't use our custom retrying logic.LOGFIRE_BASE_URL / logfire.configure(base_url=...) is now only intended for actual alternative Logfire backends, which are currently only available to Logfire developers, and unlike OTEL_EXPORTER_OTLP_ENDPOINT requires authenticating with Logfire.capture_statement to Redis instrumentation by @Kludex in https://github.com/pydantic/logfire/pull/355Nothing published for this version
Add missing return on instrument methods by @Kludex in https://github.com/pydantic/logfire/pull/360
logfire.exception() to logfire-api by @Kludex in https://github.com/pydantic/logfire/pull/358TypeAlias from code source by @Kludex in https://github.com/pydantic/logfire/pull/359ParamSpec non-private by @Kludex in https://github.com/pydantic/logfire/pull/361Add logfire.instrument_mysql() by @aditkumar72 in https://github.com/pydantic/logfire/pull/341
logfire.instrument_mysql() by @aditkumar72 in https://github.com/pydantic/logfire/pull/341Handle newer opentelemetry versions by @alexmojaki in https://github.com/pydantic/logfire/pull/337
setuptools changing sys.path for importing packaging.version by @alexmojaki in https://github.com/pydantic/logfire/pull/344Add instrument_celery method by @Kludex in https://github.com/pydantic/logfire/pull/322
instrument_celery method by @Kludex in https://github.com/pydantic/logfire/pull/322capture_headers by @alexmojaki in https://github.com/pydantic/logfire/pull/318None with loguru by @alexmojaki in https://github.com/pydantic/logfire/pull/331Fix recursive logging from OTEL's BatchSpanProcessor by @alexmojaki in https://github.com/pydantic/logfire/pull/306
BatchSpanProcessor by @alexmojaki in https://github.com/pydantic/logfire/pull/306Fix release process for logfire-api by @Kludex in https://github.com/pydantic/logfire/pull/303
logfire-api by @Kludex in https://github.com/pydantic/logfire/pull/303Add logfire-api by @Kludex in https://github.com/pydantic/logfire/pull/268
logfire-api by @Kludex in https://github.com/pydantic/logfire/pull/268force_flush at end of AWS Lambda invocation by @alexmojaki in https://github.com/pydantic/logfire/pull/296Fix ignore no config warning message by @ba1mn in https://github.com/pydantic/logfire/pull/292
StaticFiles doesn't break instrument_fastapi by @alexmojaki in https://github.com/pydantic/logfire/pull/294Add scrubbing: ScrubbingOptions | False parameter to logfire.configure, replacing scrubbing_patterns and scrubbing_callback by @alexmojaki in https://
scrubbing: ScrubbingOptions | False parameter to logfire.configure, replacing scrubbing_patterns and scrubbing_callback by @alexmojaki in https://github.com/pydantic/logfire/pull/283collect_package_info by @alexmojaki in https://github.com/pydantic/logfire/pull/285Prevent 'dictionary changed size during iteration' error in install_auto_tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/277
install_auto_tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/277suppress_instrumentation when retrying exports by @alexmojaki in https://github.com/pydantic/logfire/pull/279log_slow_async_callbacks by @alexmojaki in https://github.com/pydantic/logfire/pull/280BREAKING CHANGE: Remove default for modules parameter of install_auto_tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/261
modules parameter of install_auto_tracing by @alexmojaki in https://github.com/pydantic/logfire/pull/261logfire.configure won't block startup and will no longer raise an exception for an invalid token, by @alexmojaki in https://github.com/pydantic/logfire/pull/274logfire_api_session parameter from logfire.configure by @alexmojaki in https://github.com/pydantic/logfire/pull/272gitpython by @alexmojaki in https://github.com/pydantic/logfire/pull/260logfire clean by @Kludex in https://github.com/pydantic/logfire/pull/267Improved handling of request errors when exporting by @alexmojaki in https://github.com/pydantic/logfire/pull/252
ignore_no_config setting added to pyproject.toml by @deepakdinesh1123 in https://github.com/pydantic/logfire/pull/254logfire whoami respect the LOGFIRE_TOKEN env var by @alexmojaki in https://github.com/pydantic/logfire/pull/256Fix backfill command by @alexmojaki in https://github.com/pydantic/logfire/pull/243
anthropic>=0.27.0BREAKING CHANGE: The processors parameter of logfire.configure() has been replaced by additional_span_processors. Passing processors will raise an err…
processors parameter of logfire.configure() has been replaced by additional_span_processors. Passing processors will raise an error. Unlike processors, setting additional_span_processors to an empty sequence will not disable the default span processor which exports to Logfire. To do that, pass send_to_logfire=False. Similarly metric_readers has been replaced by additional_metric_reader. By @alexmojaki in https://github.com/pydantic/logfire/pull/233Add new methods for easier integration in https://github.com/pydantic/logfire/pull/207:
Add new methods for easier integration in https://github.com/pydantic/logfire/pull/207:
instrument_flaskinstrument_starletteinstrument_aiohttp_clientinstrument_sqlalchemyinstrument_pymongoinstrument_redisBREAKING CHANGE: Calling logfire.info, logfire.error, logfire.span etc. will no longer automatically configure logfire if it hasn't been configured al…
BREAKING CHANGE: Calling logfire.info, logfire.error, logfire.span etc. will no longer automatically configure logfire if it hasn't been configured already. Instead it will emit a warning and not log anything.
Users must call logfire.configure() before they want logging to actually start, even if they don't pass any arguments to configure and all configuration is done by environment variables.
Using integrations like logfire.instrument_fastapi() before calling configure will also emit a warning but it will still set up the instrumentation, although it will not log anything until configure is called.
Add logfire.suppress_instrumentation context manager, silence urllib3 debug logs from exporting by @jlondonobo in https://github.com/pydantic/logfire/
logfire.suppress_instrumentation context manager, silence urllib3 debug logs from exporting by @jlondonobo in https://github.com/pydantic/logfire/pull/197Fix structlog import by @alexmojaki in https://github.com/pydantic/logfire/pull/217
Allow passing OTEL kwargs through instrument_fastapi by @alexmojaki in https://github.com/pydantic/logfire/pull/205
Add logfire.instrument_requests() by @tlpinney in https://github.com/pydantic/logfire/pull/196
logfire.instrument_requests() by @tlpinney in https://github.com/pydantic/logfire/pull/196logfire.instrument_httpx() by @tlpinney in https://github.com/pydantic/logfire/pull/198logfire.instrument_django() by @inspirsmith in https://github.com/pydantic/logfire/pull/200Allow instrumenting OpenAI/Anthropic client classes or modules by @alexmojaki in https://github.com/pydantic/logfire/pull/191
Fix logging integrations with non-string messages by @alexmojaki in https://github.com/pydantic/logfire/pull/179
Add 'executing' version to 'logfire info' output by @alexmojaki in https://github.com/pydantic/logfire/pull/180
include_url with Pydantic's V1 ValidationError by @Kludex in https://github.com/pydantic/logfire/pull/184Don't scrub spans from OpenAI integration by @alexmojaki in https://github.com/pydantic/logfire/pull/173
logfire projects use command by @Kludex in https://github.com/pydantic/logfire/pull/177Improve error when opentelemetry-instrumentation-fastapi is missing by @Kludex in https://github.com/pydantic/logfire/pull/143
opentelemetry-instrumentation-fastapi is missing by @Kludex in https://github.com/pydantic/logfire/pull/143send_to_logfire to False when running under Pytest by @Kludex in https://github.com/pydantic/logfire/pull/154logfire.metric_gauge() by @Kludex in https://github.com/pydantic/logfire/pull/153stack_info instead of stack_offset by @Kludex in https://github.com/pydantic/logfire/pull/137Close spans when process shuts down before the exporter shuts down and drops them by @alexmojaki in https://github.com/pydantic/logfire/pull/108
psycopg in OTEL_PACKAGES and optional-dependencies by @Elkiwa in https://github.com/pydantic/logfire/pull/115Add log level on on_start for ASGI send and receive messages by @Kludex in https://github.com/pydantic/logfire/pull/94
on_start for ASGI send and receive messages by @Kludex in https://github.com/pydantic/logfire/pull/94Fix pydantic plugin for cloudpickle by @alexmojaki in https://github.com/pydantic/logfire/pull/86
Fix OpenAI streaming empty chunk error by @hramezani in https://github.com/pydantic/logfire/pull/69
opentelemetry-instrumentation-sklearn on scikit-learn instead of sklearn by @Kludex in https://github.com/pydantic/logfire/pull/75Don't scrub 'author' by @alexmojaki in https://github.com/pydantic/logfire/pull/55
Add logfire.instrument_asyncpg() by @alexmojaki in https://github.com/pydantic/logfire/pull/44
logfire.instrument_asyncpg() by @alexmojaki in https://github.com/pydantic/logfire/pull/44Update README by @Kludex in https://github.com/pydantic/logfire/pull/2
First release from new repo!
instrument_openai by @samuelcolvin in https://github.com/pydantic/logfire/pull/18logfire info and issue templates by @samuelcolvin in https://github.com/pydantic/logfire/pull/22psycopg2 docs runnable as is by @Kludex in https://github.com/pydantic/logfire/pull/31logfire.instrument_psycopg() function by @alexmojaki in https://github.com/pydantic/logfire/pull/30logfire.testing doesn't depend on pydantic and eval_type_backport by @alexmojaki in https://github.com/pydantic/logfire/pull/40Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →